関数・メソッド

プロシージャの引数を省略可能にする【Optionalキーワード】【ExcelVBA】

Optionalキーワード

プロシージャの引数宣言時に、Optionalキーワードを使った引数を省略することができます。
汎用性の高い関数を作るときに便利ですが、
省略することで返ってわかりにくくなる場合は使用しない方がよいです。

構文
Sub | Function name([Optional] [ByVal | ByRef] varname[()] [As type] [= defaultvalue])
 [statements]
End Sub

Optional 指定した引数が省略可能であることを示します。省略可。
このキーワードを指定する場合、すべて Optional を付けて宣言しなければなりません。
ByVal その引数が、値渡しで渡されることを示します。省略可。
ByRef その引数が、参照渡しで渡されることを示します。既定値は ByRef です。省略可。
varname 引数を表す変数名です。必須。
type プロシージャに渡す引数のデータ型を指定します。省略可。
※Optional が指定されていない場合は、ユーザー定義型またはオブジェクトの種類を指定することもできます。
defaultvalue 任意の定数または定数式を指定します。省略可。
※Optional を指定したパラメータに対してのみ有効です。

引数を省略したサンプルコード

'メインのプロシージャ
Sub Sample()

    Dim price As Long

    price = 5000

    MsgBox price & "円の3割引きは" & Sale(price) & "円、" _
     & "7割引きは" & Sale(price, 0.7) & "円です"

End Sub

'呼び出されるプロシージャ
'2つ目の引数を省略可能にし、規定値を「0.3」とする
Function Sale(ByVal price As Long, Optional Discount As Double = 0.3) As Long
                 
    Sale = price * (1 - Discount)  '割引後の価格を計算

End Function

注意点

    • 省略不可な引数は全て Optional の前で宣言してください。
    • 省略可能に設定できる値は、定数のみです。
    • 引数の数を可変にできる ParamArray を使った場合は、Optional は指定できません。

関連記事

コメント