VBAで引数の数を可変にする

VBAのユーザー定義関数で引数の数が一定でない場合があります。

Function kansu(a, b, c)

このケースでは、a、b、cが引数です。引数の数は3個です。

Function kansu(a, b, c, d)

このケースでは、a、b、c、dが引数です。引数の数は4個です。
このように、場合によって引数の数が違う場合のユーザー定義関数の作り方を示します。

ParamArrayを使う

Function sample1(ParamArray arrs())
    t = 0
    For i = 0 To UBound(arrs)
        If IsNumeric(arrs(i)) Then
            t = t + arrs(i)
        End If
    Next i
    sample1 = t
End Function

これは与えられた引数をすべて合計するという関数です。
「ParamArray 変数名()」と書くと引数の数を可変にすることができます。そして引数は配列として取得します。
次のようにして使えます。

Sub test1()
    Cells(1, 1) = sample1(1, 2, 3)
End Sub

またワークシート関数として「=sample1(1,2,3)」や「=sample1(5,6,7,8)」のように使うこともできます。

配列を使う

Function sample2(arrs)
    t = 0
    For i = 0 To UBound(arrs)
        If IsNumeric(arrs(i)) Then
            t = t + arrs(i)
        End If
    Next i
    sample2 = t
End Function

これは引数で与えられた配列の要素をすべて合計するという関数です。
したがって「引数の数を可変にする」のではなく「引数を配列にして要素数を可変にする」という手法です。
次のようにして使えます。

Sub test2()
    Dim a(10)
    a(0) = 1
    a(1) = 2
    a(2) = 3
    Cells(2, 1) = sample2(a)
End Sub

コメント

タイトルとURLをコピーしました