-
∨目次
- 可変長な引数を作成する
- 任意の数の引数を渡す
- 引数を省略する
- 配列を渡す
VBA 可変長な引数配列 ParamArray
はじめに
Excel VBA マクロの関数に可変長な引数 ParamArray を渡す方法を紹介します。
好きな数だけ引数を渡して、それが配列になります。
複数の異なる値を受け取って処理をしたいときなどに使います。
- 関数に引数を渡す方法がわからない方は「関数に引数を渡す」をご覧ください。
-
目次
- 可変長な引数を作成する
- 任意の数の引数を渡す
- 引数を省略する
- 配列を渡す
可変長な引数を作成する
可変長な引数を作成するにはParamArray 引数名() As Variantのように入力します。必ず配列の Variant 型にします。ParamArray を付けると、任意の数の引数を配列に変換して受け取れます。
Sub 関数名(ParamArray 引数() As Variant)
End Sub
ParamArray を付けられるのは最後の引数だけです。
Sub 関数名(引数1 As Integer, ParamArray 引数2() As Variant)
End Sub
' これはできません。
Sub 関数名(ParamArray 引数1() As Variant, 引数2 As Integer)
End Sub
ParamArray の引数には ByVal, ByRef, Optional を指定できません。
ParamArray の引数があるときは、他の引数に Optional を指定できません。
' これはできません。
Sub 関数名(ParamArray ByVal 引数1() As Variant)
End Sub
' これはできません。
Sub 関数名(Optional ParamArray 引数1() As Variant)
End Sub
' これはできません。
Sub 関数名(Optional 引数1 As Integer = 1, ParamArray 引数2() As Variant)
End Sub
VBA では「Array 関数」や「Choose 関数」などで使われています。
任意の数の引数を渡す
ParamArray の引数に,で区切って複数の値を渡します。その数の要素数を持った配列になります。
Sub 実行()
Call サブ(1, 2, 3) ' 1,2,3
Call サブ("Tips", "found") ' Tips,found
Call サブ("Tips", 2) ' Tips,2
End Sub
' この関数が呼び出されます
Sub サブ(ParamArray 引数() As Variant)
Debug.Print(Join(引数, ",")) ' 配列をカンマ区切りで出力する
End Sub
ParamArray 以外の引数が先にあるときは、それを先に指定してから ParamArray の引数に,で区切って値を渡します。
Sub 実行()
Call サブ(1, 2, 3) ' 2,3
Call サブ("Tips", "found") ' found
End Sub
' この関数が呼び出されます
Sub サブ(引数1 As String, ParamArray 引数2() As Variant)
Debug.Print(Join(引数2, ",")) ' 配列をカンマ区切りで出力する
End Sub
引数を省略する
ParamArray の引数は省略できます。そのときは要素数0 To -1という異常な配列が作成され、要素はありません。
Sub 実行()
Call サブ ' LBound = 0, UBound = -1
End Sub
' この関数が呼び出されます
Sub サブ(ParamArray 引数() As Variant)
Debug.Print(LBound(引数))
Debug.Print(UBound(引数))
End Sub
これは ParamArray の引数を For 文でループするときに、エラーにならないようにするためです。
配列を渡す
ParamArray の引数に配列を渡したときは、引数の配列の要素に渡した配列が入っています。自動で展開されることはありません。
Sub 実行()
Call サブ(Array("配列"), 2, "三") ' Variant(), Integer, String
End Sub
' この関数が呼び出されます
Sub サブ(ParamArray 引数() As Variant)
Dim v As Variant
For Each v In 引数
Debug.Print(TypeName(v)) ' 引数の要素の型を出力する、配列のときは Variant()
Next
End Sub
スポンサーリンク