[[20240819135436]] 『optionalについて』(sea) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『optionalについて』(sea)

 VBAスタンダードに以下の問題がありました

 M_proc()実行結果はどうなるか

 sub M_proc()
  dim a as long
  a=F_proc(3)
  msgbox a
 end sub

 Function F_proc(optional x as long = 5)as long
  F_proc =x*2
 End function

 答え 6

 a=F_proc(3)で、xに3が入り3*2になり、
 答えが6になるのかと思います…

 ためしに a=F_proc とすると、答えが10なので
 xに何も入っていなければ、
 ファンクションの(optional x as long = 5)の
 5が入るといった認識で間違っていないでしょうか

 具体的にどういう時にoptionalを使うのでしょうか

< 使用 Excel:Excel2010、使用 OS:Windows10 >


https://excel-ubara.com/excelvba1/EXCELVBA407.html

ご自分で探せるようになると勉強がさらに捗るかと。

 >具体的にどういう時にoptionalを使うのでしょうか

通常は既定値が決まっているが、
イレギュラーな場合にも対応できるようにしたいときに使う感じ?
エクセルのVLOOKUP関数でいうと、
最後の引数(検索方法)が、省略可になってますよね?

あと、セルのアドレスが欲しい場合、VBAだと
Range("A1").Address
とかって書くと思いますが、
これって引数を省略してますよね?

Range("A1").Address False,Ture,xlA1,True
とかって書く場合もありますよね?

それらと同じような機能を持たせたプログラムを自作するときに使います。
(まっつわん) 2024/08/19(月) 14:41:56


 かぶりましたが...

 その理解で正しいですよ。

 F_proc (3)
        ~~~ 引数

 上のは、F_proc の引数が 3

 Function の(Optional x As Long = 5)が、デフォルトの値[ 5 ]ですから
 引数を指定しないため a = F_proc または、F_proc() では デフォルトの x = 5 が使われ
 の答えは F_proc = 5 * 2 となり、戻り値は 10 ですね。

 >具体的にどういう時にoptionalを使うのでしょうか

 簡単な例 : 会員制度の割引制度とか?

 Sub 会計_Sample()
    Dim Discount As Double
    Dim MemberTotal As Double

    ' 割引額を取得
    Discount = Range("A1").Value

    ' 割引額を 会計処理 関数に渡して計算
    MemberTotal = 会計処理(Discount)
    MsgBox "割引額: " & Discount & vbCrLf & "合計: " & MemberTotal
 End Sub

 Function 会計処理(Optional ByVal Discount As Double = 0) As Double
    Dim total As Double
    total = 100 - Discount ' デフォルトは割引なし
    会計処理 = total
 End Function
(あみな) 2024/08/19(月) 14:55:10

 覚えておこう…
 使う機会があるといいな

 まっつわんさん あみなさん ありがとうございます
(sea) 2024/08/19(月) 15:55:30

 個人的に一番多いパターン

 例えば「初期化」とか「マスタ更新」とかいった通常用途のマクロに省略可能引数を付けて、
 Trueを渡す事により
 同じマクロが「完全初期化」「マスタ強制更新」といったメンテ用のマクロに取って代る様な仕掛け。

 次に多いパターン

 一旦サブルーチンを作って実務で運用を開始した後になってから、新たに条件分岐等が必要になってくる場合、
 その追加となった条件を省略可能引数で無理やり付け足すという違法増築マガイな使い方がをする事も多いです。
 まあこちらは
 プログラムの仕様を、ちゃんとフローや記述書におこしてからコードを書かない
 行き当たりばったりなコーディングが染み付いてしまってる私の様なモンにだけありがちなパターンだと思いますが ^^;

(白茶) 2024/08/19(月) 17:34:49


 >使う機会があるといいな

ちょっとした便利ツールを作るくらいなら、使う機会はないかと。
がっつりアプリケーションとか作るときに、
ほぼ同じだけど、ちょっとだけ違うことをしたいとき、
すでに作った自作関数を再利用できると、のちのちのメンテナンスが楽かも。

https://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_053.html
ネット上のoptionalのサンプルコード探してみました。流し読み程度で。。。。
(まっつわん) 2024/08/19(月) 18:52:09


 こちらの質問掲示板にある全文検索機能を使ってみてはどうでしょう。
 質疑中に現れるoptionalの使い方が参考になるでしょう。
 optionalの専門家になれるかもしれません。

 対極の考え方として、「自分にとって本当に必要になる時までじっと待つ」というスタンスもあるでしょう。
 本当にあなたに必要なことであれば、いつかはきっとそういう時がくるでしょう。
 それまでは余りじたばたしない、というのも一つのポリシーです。
(xyz) 2024/08/19(月) 23:59:04

 白茶さん まっつわんさん xyzさん
 書き込んでいただいた内容を確認させて頂いて
 少し整理ができそうです
 ありがとうございました
(sea) 2024/08/27(火) 10:42:51

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.