「ユーザー定義関数に渡す引数の数は可変長にしたい」
VBAでツール作成をしていると、複数の同じ用途の値を同時に処理したくなる時があります。
そして、ワークシートのデータなどを扱う処理の場合、引数に渡したい値の数は決まっていない時があります。
そんな場合のユーザー定義関数を作る際には、引数指定の際に『ParamArrayキーワード』を使います。
本記事ではそんなParamArrayキーワードについて解説していきます。
関数の引数を可変にする方法
関数の引数を可変(引数の数が決まっていない)の関数を作る場合は、引数に『ParamArrayキーワード』を使います。
このParamArrayキーワードを使った引数は”配列”として扱います。
下は「2つの商品の合計価格と、3つの商品の合計価格を求める」コードになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub Main() Dim price1 As Long Dim price2 As Long Dim price3 As Long price1 = 100 price2 = 200 price3 = 300 MsgBox "100円+200円の合計価格は「" & Tax(price1, price2) & "円」、" & vbCrLf _ & "100円+200円+300円の合計価格は「" & Tax(price1, price2, price3) & "円」" End Sub |
上ではTax関数に渡す引数を2つ場合と3つ場合で呼び出しています。
11行目に引数2つの「Tax(price1, price2)」、12行目に引数3つの「Tax(price1, price2, price3)」を記述しています。※引数はいくつでもOK。
そして、Tax関数の中身は次のようになっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Function Tax(ParamArray prise()) As Long Dim temp As Long, i As Long Dim taxRate As Double taxRate = 0.08 For i = LBound(prise) To UBound(prise) temp = temp + prise(i) Next Tax = temp * (1 + taxRate) End Function |
引数の数が不定な関数を作るための重要ポイントは1行目の「Tax(ParamArray prise())」です。
上では引数priseをParamArrayキーワードで指定しています。
そして、ParamArrayキーワードで指定すると配列として扱えるので、8~10行目で要素数分ループして値を取得して計算しています。
上のコードを実行すると下のような結果が得られます。
【注意】ParamArrayキーワードを使う際の注意点
ParamArrayキーワードを使う際には下の2つに注意してください。
・「Optionalキーワード」と一緒に引数指定ができない。
・指定する際は必ず最後の引数にする。
Functionプロシージャには複数のキーワードがあります。
そのキーワードの中に、省略可能な引数にするための『Optionalキーワード』があります。
そのOptionalキーワードとParamArrayキーワードを同じプロシージャーの引数で指定することはできません。
下のように指定することができないということ。
×:Tax(Optional i As Long ,ParamArray prise())
また、ParamArrayキーワードで指定する場合は、必ず最後の引数でなければなりません。
〇:Function Tax(taxRate As Double, ParamArray prise()) As Long
×:Function Tax(ParamArray prise(), taxRate As Double) As Long
1位 | 2位 | 3位 |
---|---|---|
Excel VBA 脱初心者のための集中講座 | パーフェクトExcel VBA | ExcelVBA 実戦のための技術 |
初心者~中級者 | 中級者 | 初心者~中級者 |
【初心者が手に取るべき参考書】 ・「書籍+動画」で圧倒的に理解しやすい入門書になっている。 ・丁寧で詳しい解説でボリューム感がある。 | 【より深い理解をしたい方にお勧めな参考書】 ・テーマに対して丁寧な解説・適度な深さで解説されている。 ・幅広くテーマを扱っていることから、基礎知識をあらかた網羅できる。 | 【入門書と一緒に買うべき参考書】 ・1つ1つのテーマを経験豊富なエンジニア視点で解説してくれている。 ・実践的で効果的なコードの書き方が理解できる。 |
【読んでみた一言】 正直、入門書はコレ一冊でいいかも。あとは中級者用の参考書に進むべし。 | 【読んでみた一言】 深く書かれているが、少々専門的に書かれていることから、読む前に数冊の入門書を読破したほうが良い。 | 【読んでみた一言】 基礎知識を持っている人が次のレベルに達するきっかけを与えてくれる参考書である。 |
スポンサーリンク