即効テクニック |
プロシージャを他のプロシージャから呼び出して使用する場合に、指定する引数が呼出す毎に異なる場合、ParamArrayキーワードを用いて引数を指定します。 ParamArrayキーワードを用いた引数はVariant型配列として扱われ、データ型の宣言は出来ません。したがって、宣言は・・・
Sub/Function (ParamArray 引数名()) As ・・・
のようになります。 以下のサンプルではFunctionプロシージャ”MySum”に任意の数の引数を与え、すべてを合計した値を返します。”TEST”プロシージャを実行してください。 (サンプル)
Function MySum(ParamArray MyVal()) As Currency Dim i As Long Dim Amount As Currency For i = LBound(MyVal) To UBound(MyVal) Amount = Amount + MyVal(i) Next i MySum = Amount End Function
Sub TEST() ’MySumプロシージャ呼び出し MsgBox MySum(100, 200, 300, 400, 500, 600) End Sub
また、引数がVariant型配列として扱われるため、与えるデータ型は一様である必要はありません。 したがって、以下のサンプルのように型の異なるデータを順に引数として与えることもできます。 (TEST2プロシージャを実行してください。MyListプロシージャに異なるデータ型を引数として与え、引数を文字列として連結して返します。) (サンプル2)
Function MyList(ParamArray MyVal()) Dim Msg As String Dim i As Integer For i = LBound(MyVal) To UBound(MyVal) Msg = Msg & MyVal(i) & vbCrLf Next i MyList = Msg End Function
Sub TEST2() Dim Amount As Currency Dim Employee As String Dim ID As Integer Amount = CCur(200000) Employee = "Exel Office" ID = 1 ’MyListプロシージャ呼び出し MsgBox MyList(ID, Employee, Amount) End Sub