ParamArray キーワード
ParamArray キーワードを使用すると任意の数の引数を渡すことができます。
【構文】
Sub name ( [ varname1 As varname1_type, varname2 As varname2_type, …, ] ParamArray varnamelast () [ As varnamelast_type ] )
【項目の説明】
- name ・・・ 定義するプロシージャ(Sub プロシージャ・Function プロシージャなど)の名前
- varname1,varname2 ・・・ プロシージャを呼び出したときに引き渡す引数を指定します。カンマ(,)で区切って複数指定することができます。
- varname1_type,varname2_type ・・・ 引数 varname1,varname2 のデータ型を指定します。省略すると引数 varname は、バリアント型(Variant)となります。
- varnamelast() ・・・ 引数(バリアント型(Variant)の配列)を指定します。
- varnamelast_type ・・・ 引数 varnamelastのデータ型(バリアント型のみ)を指定します。
複数の引数を指定する場合、ParamArray は最後に指定する必要があります。
ParamArray キーワードを使用した引数は、バリアント型(Variant)の配列として宣言しなければなりません。
ParamArray キーワードを使用した引数に、ByRef、ByVal、Optional の各キーワードを使用することはできません(その引数は、常に参照渡しとなります)。
ParamArray キーワードを使用した場合、別の引数に対して、Optional キーワードを使用することはできません。
ParamArray キーワードは、Option Base 1 ステートメントの影響を受けません。配列の添え字の最小値は、常に「0」となります。
「ParamArray キーワード」の使用例
サンプルVBAソース
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
'----------------------------------------------------------------- Option Explicit Option Base 1 '----------------------------------------------------------------- Sub Sample() Dim a, b, c a = 10: b = 20: c = 30 '引数は常に参照渡しであることを確認 Call Sample_ParamArray01(a, b, c) Debug.Print a '20 Debug.Print b '40 Debug.Print c '60 '任意の数の数値の合計を取得 Debug.Print Sample_ParamArray02(1, 2, 3, 4, 5) '15 Debug.Print Sample_ParamArray02(20, 35, "ああ") '55 Debug.Print Sample_ParamArray02(9.2, -8, #1/1/2015#) '1.2 End Sub '----------------------------------------------------------------- ' ParamArray を使用(引数の値を全て2倍にする) '----------------------------------------------------------------- Sub Sample_ParamArray01(ParamArray val()) Dim i As Long MsgBox val(1) 'ParamArray は、Option Base 1 の影響を受けない '20 が表示されます For i = LBound(val) To UBound(val) val(i) = val(i) * 2 Next i End Sub '----------------------------------------------------------------- ' ParamArray を使用(数値の合計) '----------------------------------------------------------------- Function Sample_ParamArray02(ParamArray val() As Variant) As Double Dim v, total As Double For Each v In val If IsNumeric(v) Then total = total + v End If Next v Sample_ParamArray02 = total End Function |