#120 | 任意の個数の引数を持つプロシージャの作り方 | VBA | |
プロシージャに渡す引数の数がさまざまである場合、次のような方法を思い付くかもしれません。 Function SumX(a, b, c, d, e, f, g, h) As Double
つまり、使う可能性のある数の引数をすべて用意しておく方法です。これでも悪くはありませんが、引数が1ケしかない場合でも、他のすべての引数に、意味のある値を指定して呼び出さなければなりません。例えば、2つの引数しか使わなくても、他の6ケの引数をゼロにして呼び出す必要があります。
SumX = a + b + c + d + e + f + g + h End Function Debug.Print SumX(1, 2, 0, 0, 0, 0, 0, 0)
かといって、次のようにすると、「引数は省略できません」というコンパイルエラーになってしまいます。
Debug.Print SumX(1, 2)
このような場合に「パラメータ配列」を使用すると大変便利です。動的な配列として引数を渡しますので、引数の数(=配列の要素数)は一切に気にする必要がありません。 パラメータ配列を引数としてプロシージャに渡すには、ParamArrayキーワードを使って、バリアント型の配列 を宣言します。なおこの宣言は、プロシージャの最後の引数にしなければなりません。 サンプルプロシージャ: Function SumX(ParamArray varValues() As Variant) As Double
このようにすれば、SumX(1, 2) のような呼び出し方も、SumX(1, 2, 3, 4, 5, 6) のような呼び出し方も可能となります。Dim dblSum As Double Dim var As Variant 'すべての要素をループで取り出します dblSum = 0 For Each var In varValues dblSum = dblSum + var Next var '計算結果を返り値にセットします SumX = dblSum End Function |
|||
|
Copyright © T'sWare All rights reserved |