#120 任意の個数の引数を持つプロシージャの作り方 VBA

プロシージャに渡す引数の数がさまざまである場合、次のような方法を思い付くかもしれません。
Function SumX(a, b, c, d, e, f, g, h) As Double

  SumX = a + b + c + d + e + f + g + h

End Function
つまり、使う可能性のある数の引数をすべて用意しておく方法です。これでも悪くはありませんが、引数が1ケしかない場合でも、他のすべての引数に、意味のある値を指定して呼び出さなければなりません。例えば、2つの引数しか使わなくても、他の6ケの引数をゼロにして呼び出す必要があります。
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
  Dim dblSum As Double
  Dim var As Variant
  
  'すべての要素をループで取り出します
  dblSum = 0
  For Each var In varValues
    dblSum = dblSum + var
  Next var

  '計算結果を返り値にセットします
  SumX = dblSum

End Function
このようにすれば、SumX(1, 2) のような呼び出し方も、SumX(1, 2, 3, 4, 5, 6) のような呼び出し方も可能となります。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved