[エクセルVBA]自作関数で可変長引数を使用する方法

関数によっては予め引数の数がわからず、使用時に臨機応変に引数の数が変わることがある。
例えば足し算をする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)、…に対応することになる。

気づかないとハマるので要注意である。

コメント