関数によっては予め引数の数がわからず、使用時に臨機応変に引数の数が変わることがある。
例えば足し算をするSUM関数であれば、2つの要素を足したいこともあれば100個の要素を足したいこともある。
こういうニーズに対応する仕組みが可変長引数である。可変長引数とはその名の通り、(引数の)数が可変である引数のことである。
エクセルVBAで自作関数に可変長引数を使用するには、ParamArrayキーワードを使用する。
以下に雛形を示す。
Public Sub SampleFunction(ParamArray params() As Variant) Dim i As Integer ' 範囲インデクス Dim param as Variant ' 可変長引数で渡された引数の1つ1つの要素 For i = 0 To UBound(params) ' 可変長引数から順番に要素を取り出す param = params(i) ' 引数がオブジェクト型である場合は Set param = params(i)とする ' paramに対する処理を以下に実装 Next End Sub
注意点としては、可変長引数として渡された引数(上記雛形ではparams)を更に、関数(仮に親関数と呼ぶ)内で別の関数(仮に子関数と呼ぶ)の引数として渡す場合である。
親関数内部ではparamsの1次の要素、即ちparams(0)、params(1)、params(2)、…がユーザーの指定した引数1つ1つに対応する。
一方、子関数内部ではparams(0)として親関数のparamsが渡される。即ち元々ユーザーが指定した引数はここでは、params(0)(0)、params(0)(1)、params(0)(2)、…に対応することになる。
気づかないとハマるので要注意である。
コメント