位置と名前による引数渡し
更新 : 2007 年 11 月
Sub プロシージャまたは Function プロシージャを呼び出すときには、引数を位置で渡したり名前で渡したりできます。位置で渡す場合は、プロシージャの定義で宣言されている順に引数を指定します。名前で渡す場合は、指定する位置 (順序) は関係なくなります。
引数を名前で渡すときには、宣言されている引数の名前、コロンと等号 (:=)、引数の値という順に指定します。引数はどのような順序でも指定できます。
たとえば、次の Sub プロシージャでは 3 つの引数を使用します。
Sub studentInfo(ByVal name As String, _
Optional ByVal age As Short = 0, _
Optional ByVal birth As Date = #1/1/2000#)
Debug.WriteLine("Name = " & name & _
"; age = " & CStr(age) & _
"; birth date = " & CStr(birth))
End Sub
このプロシージャを呼び出すときには、引数を位置で指定することも、名前で指定することも、両方を一緒に使って指定することもできます。
位置による引数渡し
引数を位置で渡してプロシージャ studentInfo を呼び出すには、次のようにコンマで区切って指定します。
Call studentInfo("Mary", 19, #9/21/1981#)
位置で指定する引数リストで省略可能な引数を省略する場合は、省略する引数の場所にコンマを置く必要があります。 age 引数を指定せずに studentInfo を呼び出す例を次に示します。
Call studentInfo("Mary", , #9/21/1981#)
名前による引数渡し
引数を名前で渡してプロシージャ studentInfo を呼び出すこともできます。この場合も、次のようにコンマで区切って指定します。
Call studentInfo(age:=19, birth:=#9/21/1981#, name:="Mary")
位置と名前の両方による引数渡し
次に示す例のように、1 つのプロシージャ呼び出しで、位置と名前の両方を使って引数を指定することもできます。
Call studentInfo("Mary", birth:=#9/21/1981#)
上の例では、引数 age が省略されていますが、 birth が名前で指定されているため、 age の場所にコンマを置く必要はありません。
位置と名前の両方を使って引数を指定する場合は、位置で指定する引数をすべて先に指定する必要があります。いったん名前で引数を指定したら、残りの引数はすべて名前で指定する必要があります。
名前による省略可能な引数の指定
名前による引数渡しは、省略可能な引数が複数あるプロシージャを呼び出す場合に便利です。引数を名前で指定する場合は、省略する引数の位置を示すためのコンマは必要はありません。また、引数を名前で指定すると、どの引数を渡してどの引数を省略したのかが把握しやすくなります。
名前による引数渡しの制限事項
引数を名前で渡しても、必要な引数を省略することはできません。省略できるのは、省略可能な引数だけです。
パラメータ配列を名前で渡すことはできません。これは、プロシージャの呼び出し時に、パラメータ配列ではコンマで区切られた不特定多数の引数が指定されますが、コンパイラは複数の引数を 1 つの名前に関連付けることができないためです。