VBAプロシージャと関数:引数の渡しのチュートリアルと実例

VBAでは、サブプロシージャまたは関数を呼び出すときに、引数を受け渡すことができます。 提供された引数は、サブプロシージャまたは関数内で使用できるため、プログラムがより動的になります。 引数の渡しの前提は、まずサブプロシージャまたは関数を作成するときに引数を設定し、サブプロシージャまたは関数を呼び出す場合に正しいやり方で引数の値を提供されることです。

  • 引数があるサブプロシージャまたは関数の定義方法。
  • サブプロシージャおよび関数を呼び出すときに引数の書き方。
  • オプションの引数の構文と使用方法。

サブプロシージャと関数についての相違点または呼び出し方法は、前の記事をご覧ください。

サブプロシージャと関数では、引数の渡しの使用方法は大体同じです。この記事では、サブプロシージャを例として引数の使用方法を解説し、関数での使用方法については、サブプロシージャを参照してください。

引数があるサブプロシージャの定義方法

サブプロシージャは1つまたは複数の引数を受け入れることができ、引数は定数、変数、条件式にすることができ、各引数は名前とデータ型を指定します。

次の例をご覧ください。次のコードは2つの引数があるプロシージャを定義しています。プロシージャ名はCustomLogで、引数はnumとbaseです。 このプロシージャの用途は、任意の底数の対数を計算することです。numは対数を計算するための値であり、baseは底数です。

'引数があるサブプロシージャを宣言する
Sub CustomLog(num As Double, base As Integer)
Debug.Print Log(num) / Log(base)
End Sub

サブプロシージャがこのように定義された後、サブプロシージャが呼び出されると、VBAは必要な引数とそのタイプを提示します。

引数があるサブプロシージャを呼び出す

引数があるサブプロシージャを呼び出すことは、定義された順序で引数を記述し、複数の引数をコンマで分けるだけです。

上記のプロシージャを例にして、メインプロシージャでCustomLogサブプロシージャを呼び出します。

'メインエントリ
Sub Main()
CustomLog 100, 10
End Sub

引数を順番に書き込むだけでなく、任意の順序で書き込めます。しかし、任意の順序で書き込む場合には、引数名が必要です。引数名のある引数を渡す構文は次のとおりです。

[引数名]:= [実際の引数の値]

引数名の後にコロンや等号(:=)を記述し、渡す引数の値を記述します。実際の例をご覧ください。次には同じ効果の3つの方法があります。

'メインエントリ
Sub Main()
CustomLog 100, 10 '方法1
CustomLog num:=100, base:=10 '方法2
CustomLog base:=10, num:=100 '方法3
End Sub

オプションの引数の使い方

実際の開発過程で、偶にはサブプロセスの引数が必須ではありません。引数があるかどうかによって、異なる操作を実行することが望みます。この状況に対応して、VBAはオプションの引数を提供します。

オプションの引数の構文

オプションの引数はサブプロシージャを定義するときに指定する必要があります。やり方は引数名の前にOptionalキーワードを追加します。

Optional [引数名] As [データ型]

CustomLogサブプロシージャを例にし、底数baseをオプションの引数として設定します。

'オプションの引数があるサブプロシージャを宣言する
Sub CustomLog(num As Double, Optional base As Integer)
'サブプロシージャコード
End Sub

呼び出すときに、VBAはオプションの引数を提示します。引数を()に記述します。

オプションの引数のデフォルト値を設定する

オプションの引数を設定した後、サブプロシージャで使用する場合は、引数が提供されているかどうかを判断する必要があります。引数が提供されておらずに直接使用される場合、プログラムはエラーが発生します。

この状況に応じて、VBAはデフォルト値メカニズムを提供しています。つまり、オプションの引数が指定されていない場合、事前に設定されたデフォルト値を使用します。

オプションの引数のデフォルト値は、プロシージャを定義する時に設定します。構文は次のとおりです。

Optional [引数名] As [データ型] = [デフォルト値]

CustomLogサブプロシージャを例にして、底数 baseをオプションの引数として設定し、デフォルト値を10に設定します。

'オプションの引数があるサブプロシージャを宣言する
Sub CustomLog(num As Double, Optional base As Integer = 10)
Debug.Print Log(num) / Log(base)
End Sub

呼び出し時に、base 底数が提供されている場合は提供された底数で計算し、底数が提供されていない場合はデフォルト値の10で計算します。

'メインエントリ
Sub Main()
CustomLog 100, 100 ' 返す1
CustomLog 100 '返す 2
End Sub

オプションの引数の位置

サブプロシージャに複数の引数がある場合、オプションの引数を引数リストの最後に書き込む必要があります。そうしないと、VBAはエラーが発生します。

オプションの引数の順序が間違った場合:

オプションの引数の正しい順序:

まとめ

VBAプロシージャと関数はどちらも、1つまたは複数の引数を受け入れることができます。 それらを呼び出すときは、引数の書き込み順序に注意してください。引数名が書き込まれない場合は、定義された順序で渡します。引数名を書き込むときに、書き込み順序は特に必要ではありません。さらに、プロシージャと関数は特定の引数をオプションの引数に設定できます。プロシージャと関数は、VLOOKUP関数の4番目の引数に似ていて、検索方法を選択できます。オプションの引数に設定すると、オプションの引数のデフォルト値も指定できます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です