次の方法で共有


方法: 不特定数のパラメーターを受け取るプロシージャを定義する (Visual Basic)

プロシージャのパラメーター リスト内で最後のエントリには、パラメーター配列を宣言できます。 これを宣言すると、プロシージャのパラメーターに対して単一の値だけでなく、値のセットを渡せるようになります。 プロシージャを定義するとき、このセットに含まれる値の数を決める必要はありません。 プロシージャを呼び出すたびに、セットが新しく判断されます。また、呼び出しのたびに異なる数の値を渡すこともできます。

詳細については、「パラメーター配列 (Visual Basic)」を参照してください。

最後のパラメーターに不特定数の値を渡すことができるプロシージャを定義するには

  1. プロシージャ宣言で、パラメーター リストを通常の方法で定義します。 最後のパラメーターを除くすべてのパラメーターが必須であること (Optional (Visual Basic) ではないこと) が必要です。

  2. 最後のパラメーター名の前に、キーワード ByVal ParamArray を指定します。 このパラメーターは自動的に省略可能になります。 キーワード Optional を指定しないでください。

  3. パラメーター配列の名前に続けて、空のかっこを記述します。

  4. 空のかっこの後に、通常どおり As 句を定義します。

  5. As 句の後に既定値を定義しないでください。 パラメーター配列の既定値は、As 句に指定したデータを持つ、空の 1 次元配列に自動的に設定されます。

パラメーター配列の値の操作

プロシージャ内のコードでは、各要素が ParamArray データ型と同じデータ型の 1 次元配列として、パラメーター配列を扱う必要があります。

パラメーター配列の値の 1 つにアクセスするには

  1. プロシージャ コードで、パラメーター配列の名前を指定して UBound 関数を呼び出し、パラメーター配列に渡す配列の長さを決定します。

  2. プロシージャ コード内の実行可能なステートメントで、パラメーター配列の名前の後に添字をかっこで囲んで指定します。 この添字は 0 ~ 上限 (UBound が返した値) の範囲の値にしてください。

セキュリティに関するメモセキュリティに関するメモ

無限に増大する配列を扱う場合、アプリケーション内部の容量を超過してしまう可能性があります。 呼び出し元のコードからパラメーターの配列を受け取る場合、その長さをテストし、アプリケーションに対して大きすぎるようであれば、適切な手順を行ってください。

使用例

パラメーター配列を受け取るプロシージャを定義し、パラメーター配列に渡されたすべての要素の値を出力する例を次に示します。

Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
    Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
    ' Use UBound to determine largest subscript of the array.
    For i As Integer = 0 To UBound(scores, 1)
        Debug.WriteLine("Score " & i & ": " & scores(i))
    Next i
End Sub

studentScores の呼び出しは、たとえば次のようになります。

Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)

コードのコンパイル

ParamArray がリスト内で最後のパラメーターであること、および、それよりも前にあるどのパラメーターにも Optional が宣言されていないことを確認してください。

参照

処理手順

方法: 不特定数のパラメーターを受け取るプロシージャを呼び出す (Visual Basic)

参照

ByVal (Visual Basic)

ParamArray (Visual Basic)

概念

プロシージャのパラメーターと引数 (Visual Basic)

引数の値渡しと参照渡し (Visual Basic)

位置と名前による引数渡し (Visual Basic)

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

プロシージャのオーバーロード (Visual Basic)

Visual Basic における型チェック

Visual Basic における配列