引数を可変にする( ParamArray )
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 | 
実行結果
関連記事
-  
              
- 
      プロシージャ内のサブルーチンへ移動(GoTo ステートメント)GoTo ステートメント GoTo ステートメントは、指定したラベルのサブルーチ … 
-  
              
- 
      引数の参照渡し・値渡し( ByRef, ByVal )引数の「参照渡し」と「値渡し」 「参照渡し」とはプロシージャに引数として変数を渡 … 
-  
              
- 
      プロシージャ内のサブルーチンへ移動(GoSub…Return ステートメント)GoSub…Return ステートメント GoSub ステートメント … 
-  
              
- 
      set ステートメントを使うSet ステートメントを使う 【構文 1】 Dim objectvar [ As … 
-  
              
- 
      配列が引数のプロシージャを作成する配列が引数のプロシージャを作成する 【構文】 { Sub | Function … 
-  
              
- 
      繰り返し処理(Do…Loop ステートメント)Do…Loop ステートメントの使い方 【構文 1】 Do [ Wh … 
-  
              
- 
      繰り返し処理(For…Next ステートメント)For…Next ステートメントの使い方 【構文】 For coun … 
-  
              
- 
      省略可能な引数・デフォルト値を設定( Optional キーワード )Optional キーワード Optional キーワードを使用するとプロシージ … 
-  
              
- 
      With ステートメントを使うWith ステートメントを使う With ステートメントを使うことで、1度指定し … 
-  
              
- 
      条件分岐 If文(If…Then…Else ステートメント)If…Then…Else ステートメントの使い方 【構文 … 
- PREV
- 引数の参照渡し・値渡し( ByRef, ByVal )
- NEXT
- 配列が引数のプロシージャを作成する
 
        
