ParamArray自体が省略されたかどうかを判定する方法を解説します。
このときParamArrayには「空の配列」が入っており、
このから配列の判定にはIsMissing関数を使用します。
※ 「空の配列」はこの「要素数0の配列」を指すことが多いと思いますが、
「Dim 配列()で定義されたあとReDimがまだの動的配列」
いわゆる初期化されていない動的配列を指すこともあります。
この「動的配列が初期化されているかどうか」の判定については、
以下の記事を参照してください。
ParamArrayが省略されたかを調べる - IsMissing関数
Sub/Functionの引数の数を任意にする場合は、
ParamArrayキーワードを使用します。
Function 自作関数(ParamArray 引数()) As Variant
この時、引数がひとつも渡されなかった場合は、
引数() の配列には「空の配列」がセットされています。
これを判定するには、IsMissing関数を使用します。
Function 自作関数(ParamArray 引数()) As Variant If IsMissing(引数) Then Err.Raise 1000, , "引数は必ずひとつ渡してください。" End If ' メインコード End Function
引数が渡されなかった場合の処理を記述する場合は、
IsMissing関数を使用してください。
おまけ:Uboundで判定する
この空の配列は「Uboundが-1」という特徴があるため、
これを判定することでもParamArrayが省略されたかを調べることができます。
Function 自作関数(ParamArray 引数()) As Variant If Ubound(引数) = -1 Then Err.Raise 1000, , "引数は必ずひとつ渡してください。" End If ' メインコード End Function
そしてこの仕様のおかげで、
以下のFor文が「0 To -1」となりノーエラースキップできるという特長があります。
Function 自作関数(ParamArray 引数()) As Variant Dim i As Long For i = LBound(引数) To UBound(引数) Next End Sub
つまり、関数の仕様によってはIsMissingで判定しなくても、
「空の配列ならFor文が実行されない」
という仕様で事足りているということも往々にしてあります。
この仕様がとても便利なため、空の配列を自作して使用することもできます。
詳しくはこちらの記事をご覧ください。
www.limecode.jp