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