方法: 不特定数のパラメーターを受け取るプロシージャを定義する (Visual Basic)
プロシージャのパラメーター リスト内で最後のエントリには、パラメーター配列を宣言できます。 これを宣言すると、プロシージャのパラメーターに対して単一の値だけでなく、値のセットを渡せるようになります。 プロシージャを定義するとき、このセットに含まれる値の数を決める必要はありません。 プロシージャを呼び出すたびに、セットが新しく判断されます。また、呼び出しのたびに異なる数の値を渡すこともできます。
詳細については、「パラメーター配列 (Visual Basic)」を参照してください。
最後のパラメーターに不特定数の値を渡すことができるプロシージャを定義するには
プロシージャ宣言で、パラメーター リストを通常の方法で定義します。 最後のパラメーターを除くすべてのパラメーターが必須であること (Optional (Visual Basic) ではないこと) が必要です。
最後のパラメーター名の前に、キーワード ByVal ParamArray を指定します。 このパラメーターは自動的に省略可能になります。 キーワード Optional を指定しないでください。
パラメーター配列の名前に続けて、空のかっこを記述します。
空のかっこの後に、通常どおり As 句を定義します。
As 句の後に既定値を定義しないでください。 パラメーター配列の既定値は、As 句に指定したデータを持つ、空の 1 次元配列に自動的に設定されます。
パラメーター配列の値の操作
プロシージャ内のコードでは、各要素が ParamArray データ型と同じデータ型の 1 次元配列として、パラメーター配列を扱う必要があります。
パラメーター配列の値の 1 つにアクセスするには
プロシージャ コードで、パラメーター配列の名前を指定して UBound 関数を呼び出し、パラメーター配列に渡す配列の長さを決定します。
プロシージャ コード内の実行可能なステートメントで、パラメーター配列の名前の後に添字をかっこで囲んで指定します。 この添字は 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)