shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel VBA】処理のパーツ化で引数を省略可能にする方法

Excel VBAで、コードの再利用や可読性を向上させるために処理(プロシージャ)のパーツ化があります。汎用性の高いパーツを作成するときは、引数を設定しますが、Optionalキーワードを使用して引数を省略可能にする方法を知っておくと便利です。

引数を省略可能にするメリット

Excelの関数であれば、省略可能な設定値がある関数があります。省略した場合は既定値で処理がされ、利用しやすい関数となります。

例えば、LEFT関数であれば、

=LEFT(文字列,[文字数])

で設定します。このとき、文字数を指定する箇所を省略すると、既定値の"1"で計算されて利用しやすい関数になっています。

プロシージャの引数を省略する方法

VBAで引数を省略可能にする場合は、Optionalキーワードを使用します。

learn.microsoft.com

要は、省略したい引数の前にOptionalキーワード をつけます。

引数が省略されたとき、既定値(定数)を代入することもできます(変数の後ろに”="で設定します)。

VBAサンプル

次のように、メインのプロシージャから「パーツ」を呼びだすとき、引数が省略されると「処理完了」が引数に代入されます。 

Sub メイン()
    Call パーツ
    Call パーツ("〇〇の処理完了")
End Sub

Sub パーツ(Optional メッセージ As String = "処理完了")
    MsgBox メッセージ
End Sub

補足説明

  • 上記は、引数がある場合は当該のメッセージ(事例の場合、”〇〇の処理完了")が表示されます。引数が省略された場合は、既定値の”処理完了”が表示されます。
  • 呼び出されるプロシージャ側で
    Sub パーツ(Optional メッセージ As String = "処理完了")
    の赤字部分が引数の省略に関する箇所です。
    = "処理完了"」の箇所は既定値の定数です。不要であれば、削除します。

 

以上、Excel VBAの処理のパーツ化で引数を省略可能にする方法でした。