VBAの○ソな部分の1つである ParamArray
を手軽に配列へ変換する方法です。
方法
filter
ワークシート関数を使えば一発です。
' サンプル
Sub hoge ( ParamArray args() As Variant )
Dim a() As Variant
a = Worksheetfunction.filter(args,True)
:
注意点(制約事項)
-
ParamArray
のインデックスは 0 始まりですが、filter関数を通すと 1 始まりに変わります。 - 数値は全て
Double
に変換されてしまいます。 - ワークシートで扱えない型を突っ込むとエラーになります。
おまけ
ParamArray
を別の関数に引き渡したいだけであれば、受け取る側の引数を ByVal
な Variant
型にすれば良いです。
Sub a ( )
b 1, 2, 3
End Sub
Sub b ( ParamArray args() As Variant )
c args
End Sub
Sub c ( ByVal args As Variant )
:
ByVal
にしないと「ParamArray の使い方が適切ではありません。」と怒られますが、このエラーメッセージのヘルプを見ると、
ParamArray として定義されたパラメーターがプロシージャ内で不適切に使用されています。 このエラーの原因と解決策を次に示します。
- 配列または ByRef Variant を想定している別のプロシージャに ParamArray が引数として渡されました。
と書いてあります。つまりはByRef
じゃなきゃ良いんです。