【VBA】関数の引数を省略可能にする方法(Optionalキーワード)

目次

はじめに

自作した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引数 honorificOptional なので、省略が可能です。この場合、honorific にはデフォルト値の "様" が自動的に使われます。

message2 = CreateGreeting("鈴木一郎", "先生")

こちらは、第2引数まで含めて呼び出しています。この場合、デフォルト値は使われず、指定された "先生" という値が honorific に使われます。


まとめ

今回は、VBAの Optional キーワードを使って、引数を省略可能な関数を作成する方法を解説しました。

  • 引数の宣言時に Optional キーワードを付けると、その引数は省略可能になる。
  • Optional 引数名 As 型 = デフォルト値 のように、デフォルト値を指定するのが一般的。
  • オプション引数は、必ず引数リストの**右端(最後)**に配置する必要がある。

このテクニックを使えば、普段はシンプルな使い方、たまに高度な使い方、といった柔軟なプロシージャを設計できます。Excelの組み込み関数にも、オプション引数を持つものが数多く存在します。ぜひマスターして、より使いやすいオリジナル関数の作成に役立ててください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次