はじめに
自作したVBA関数(Function
)をより柔軟で使いやすくするために、「引数(ひきすう)を省略可能にしたい」という場合があります。例えば、通常は決まった値を使うけれど、時々その値を変更したい、といった引数です。
VBAでは、引数を宣言する際に Optional
キーワードを付けることで、その引数を省略可能な「オプション引数」として定義できます。さらに、デフォルト値を指定しておけば、引数が省略されたときに自動的にその値が使われるようになります。
この記事では、Optional
キーワードを使って、引数が省略できる便利な関数の作り方を解説します。
オプション引数を持つFunction
のサンプルコード
この例では、挨拶のメッセージを作成する CreateGreeting
という関数を作成します。敬称("様"
)は通常使いますが、省略することも、別のもの("先生"
など)に変更することもできるようにします。
完成コード
' --- オプション引数を持つFunction ---
' 第2引数(honorific)が省略可能なオプション引数
Function CreateGreeting(personName As String, Optional honorific As String = "様") As String
' 呼び出し元から渡された引数を使って、挨拶文を作成して返す
CreateGreeting = personName & " " & honorific & ", こんにちは。"
End Function
' --- 作成したFunctionを呼び出すSubプロシージャ ---
Sub Test_CreateGreeting()
Dim message1 As String
Dim message2 As String
' --- 第2引数を省略して呼び出す ---
' 省略された場合、デフォルト値の "様" が使われる
message1 = CreateGreeting("山田太郎")
' --- 全ての引数を指定して呼び出す ---
' 指定された "先生" が "様" の代わりに使われる
message2 = CreateGreeting("鈴木一郎", "先生")
' --- 結果をメッセージボックスに表示 ---
MsgBox message1 & vbCrLf & message2, vbInformation, "挨拶メッセージ"
End Sub
実行結果
Test_CreateGreeting
を実行すると、以下のメッセージボックスが表示されます。
山田太郎 様, こんにちは。
鈴木一郎 先生, こんにちは。
コードの解説
Function CreateGreeting(..., Optional honorific As String = "様")
これが、オプション引数を定義している部分です。
Optional
: 引数honorific
が省略可能であることを示します。= "様"
: 引数が省略された場合に使われるデフォルト値を指定しています。Optional
キーワードを使う引数には、このようにデフォルト値を設定するのが一般的です。
重要なルール:
- オプション引数は、必ずプロシージャの引数リストの最後にまとめて記述する必要があります。必須の引数の間にオプション引数を挟むことはできません。
Optional
引数にデフォルト値を指定しないことも可能ですが、その場合、引数が省略されたかをIsMissing
関数で判定する必要があり、コードが少し複雑になります。
message1 = CreateGreeting("山田太郎")
CreateGreeting
関数を、第1引数だけで呼び出しています。第2引数 honorific
は Optional
なので、省略が可能です。この場合、honorific
にはデフォルト値の "様"
が自動的に使われます。
message2 = CreateGreeting("鈴木一郎", "先生")
こちらは、第2引数まで含めて呼び出しています。この場合、デフォルト値は使われず、指定された "先生"
という値が honorific
に使われます。
まとめ
今回は、VBAの Optional
キーワードを使って、引数を省略可能な関数を作成する方法を解説しました。
- 引数の宣言時に
Optional
キーワードを付けると、その引数は省略可能になる。 Optional 引数名 As 型 = デフォルト値
のように、デフォルト値を指定するのが一般的。- オプション引数は、必ず引数リストの**右端(最後)**に配置する必要がある。
このテクニックを使えば、普段はシンプルな使い方、たまに高度な使い方、といった柔軟なプロシージャを設計できます。Excelの組み込み関数にも、オプション引数を持つものが数多く存在します。ぜひマスターして、より使いやすいオリジナル関数の作成に役立ててください。