PR

【VBA】プロシージャの引数を省略可能にする方法

VBA
記事内に広告が含まれています。

VBAでは、Sub/Functionプロシージャの引数に「Optional」キーワードというものを使用すると、プロシージャを呼び出す際に、その引数を省略することができます。
また、引数を省略した際に、その引数にデフォルト値を設定することもできます。
例を挙げてご説明いたします。

スポンサーリンク

Optionalキーワードの使用方法

例として、引数に価格と税率を指定すると、税込み価格を返す関数(Functionプロシージャ)を作ってみます。

プロシージャの定義方法

Function GetTaxIncludedPrice(Price As Long, Optional TaxRate As Single) As Long
    GetTaxIncludedPrice = Price * (1 + TaxRate)
End Function

このように、第2引数の「TaxRate」(税率)の前に「Optional」キーワードを付けると、何も設定しなくても、関数を呼び出すことができます。

プロシージャの呼び出し方法(引数を指定する例)

まずは、普通に引数を指定して、Functionプロシージャを使用する例です。

MsgBox GetTaxIncludedPrice(100, 0.1)

結果は「110」が返ってきます。

プロシージャの呼び出し方法(引数を省略する例)

次に、第2引数を省略して、Functionプロシージャを使用する例です。

MsgBox GetTaxIncludedPrice(100)

Functionプロシージャの呼び出し元で、第2引数の「TaxRate」が省略されたため、「TaxRate」が属性初期値である「0」として処理が行われて、結果として「100」が返ってきます。

Optionalを付けた引数にデフォルト値を設定する方法

以下のようにすると、引数が省略された場合のデフォルト値を設定できます。

プロシージャの定義方法

Function GetTaxIncludedPrice(Price As Long, Optional TaxRate As Single = 0.1) As Long
    GetTaxIncludedPrice = Price * (1 + TaxRate)
End Function

このように、「Optional」キーワードを付けた第2引数の「TaxRate」の後ろに=0.1」のように値を付けると、デフォルト値を設定できます。

プロシージャの呼び出し方法(引数を指定する例)

普通に引数を指定する場合は、Functionプロシージャの呼び出し方法は変わりません。

MsgBox GetTaxIncludedPrice(100, 0.08)

結果は「108」が返ってきます。

プロシージャの呼び出し方法(引数を省略する例)

次に、第2引数を省略した場合の例です。

MsgBox GetTaxIncludedPrice(100)

Functionプロシージャの呼び出し元で、第2引数の「TaxRate」が省略されたため、「TaxRate」は、デフォルト値として設定された「0.1」として処理が行われて、結果として「110」が返ってきます。

Optionalキーワードの便利な用途

「既存のプロシージャに新たな機能を追加したい。そのために引数を追加したいが、プロシージャの呼び出し元を修正するのが大変である。」といった場合に、Optionalキーワードが便利です。

例えば、上記の説明で使用した「GetTaxIncludedPrice」関数に、「処理区分を追加して、税額のみを返す機能を付け加えたい」とします。
このような場合には、既存の「GetTaxIncludedPrice」関数を以下のように修正すれば、

  • 既存の呼び出し元では処理区分が指定されないため、現行通り税込み価格を返す
  • 新規処理では処理区分を指定して税額のみを返す

といったことが可能です。

Function GetTaxIncludedPrice(Price As Long, Optional TaxRate As Single = 0.1, Optional ExecMode As Integer = 0) As Long
    If ExecMode = 0 Then
        GetTaxIncludedPrice = Price * (1 + TaxRate)
    Else
        GetTaxIncludedPrice = Price * TaxRate
    End If
End Function

補足事項

  • 上記の例の通り、Optionalキーワードは複数指定可能です。
    「第2引数を省略して、第3引数のみ指定したい」といった場合は、以下のようにプロシージャを呼び出せば対応可能です。
    GetTaxIncludedPrice(100, , 1)
  • 当記事では、戻り値を返す「Functionプロシージャ」を例に説明しましたが、戻り値を返さない「Subプロシージャ」でも、同様にOptionalキーワードを使用できます。

コメント

タイトルとURLをコピーしました