次の方法で共有


省略可能なパラメーター (Visual Basic)

プロシージャを呼び出すときに、プロシージャ パラメーターが省略可能であり、引数を指定する必要がないことを指定できます。 省略可能なパラメーター は、プロシージャ定義の Optional キーワードによって示されます。 次の規則が適用されます。

  • プロシージャ定義内のすべての省略可能なパラメーターでは、既定値を指定する必要があります。

  • 省略可能なパラメーターの既定値は定数式である必要があります。

  • プロシージャ定義で省略可能なパラメーターに続くすべてのパラメーターも省略可能である必要があります。

次の構文は、省略可能なパラメーターを持つプロシージャ宣言を示しています。

Sub name(ByVal parameter1 As datatype1, Optional ByVal parameter2 As datatype2 = defaultvalue)  

省略可能なパラメーターを使用したプロシージャの呼び出し

省略可能なパラメーターを指定してプロシージャを呼び出すときに、引数を指定するかどうかを選択できます。 そうでない場合、プロシージャはそのパラメーターに対して宣言された既定値を使用します。

引数リストで 1 つ以上の省略可能な引数を省略すると、連続するコンマを使用して位置をマークします。 次の呼び出し例は、1 番目と 4 番目の引数を指定しますが、2 番目または 3 番目の引数は指定しません。

Sub name(argument 1, , , argument 4)  

次の例では、 MsgBox 関数を複数呼び出します。 MsgBox には、1 つの必須パラメーターと 2 つの省略可能なパラメーターがあります。

MsgBoxの最初の呼び出しでは、3 つの引数をすべて、MsgBox定義した順序で指定します。 2 番目の呼び出しでは、必要な引数のみが提供されます。 3 番目と 4 番目の呼び出しでは、1 番目と 3 番目の引数が指定されます。 3 番目の呼び出しは位置によってこれを行い、4 番目の呼び出しでは名前で行います。

MsgBox("Important message", MsgBoxStyle.Critical, "MsgBox Example")
MsgBox("Just display this message.")
MsgBox("Test message", , "Title bar text")
MsgBox(Title:="Title bar text", Prompt:="Test message")

省略可能な引数が存在するかどうかを判断する

プロシージャは、特定の引数が省略されたか、呼び出し元のコードが既定値を明示的に指定したかを実行時に検出できません。 この区別を行う必要がある場合は、ありそうもない値を既定値として設定できます。 次の手順では、省略可能なパラメーター officeを定義し、その既定値 QJZをテストして、呼び出しで省略されているかどうかを確認します。

Sub notify(ByVal company As String, Optional ByVal office As String = "QJZ")
    If office = "QJZ" Then
        Debug.WriteLine("office not supplied -- using Headquarters")
        office = "Headquarters"
    End If
    ' Insert code to notify headquarters or specified office.
End Sub

省略可能なパラメーターが Stringなどの参照型の場合は、引数に予期される値でない場合は、既定値として Nothing を使用できます。

省略可能なパラメーターとオーバーロード

省略可能なパラメーターを持つプロシージャを定義するもう 1 つの方法は、オーバーロードを使用することです。 省略可能なパラメーターが 1 つある場合は、2 つのオーバーロードされたバージョンのプロシージャを定義できます。1 つはパラメーターを受け入れ、1 つはパラメーターを受け取らずに定義します。 この方法は、省略可能なパラメーターの数が増えるにつれて、より複雑になります。 ただし、その利点は、呼び出し元のプログラムが各省略可能な引数を指定したかどうかを絶対に確認できることです。

こちらも参照ください