IsArray
IsArray関数は変数が配列かどうかを判定します。
引数で渡された変数が配列の場合はTrue、配列でない場合はFalseを返します。
構文
Function IsArray(VarName) As Boolean
VarName | 変数を指定します。 |
戻り値 Boolean |
配列であればTrue、そうでなければFalseを返します。 |
動的配列は配列の内容が未設定でもTrueを返す
動的配列の場合は配列の中身が未設定でも配列と判定します。
以下は動的配列の単純なサンプルですが、Trueを返します。
1 2 3 4 5 |
Sub IsArrayTest1() Dim ar() Debug.Print IsArray(ar) '// True End Sub |
サンプルコード(と、IsArray関数の用途)
IsArray関数は使う機会はほとんどないと思います。
なぜなら、配列を使うかどうかはコードを書く本人が明示的に分かるため、わざわざIsArray関数を使って配列かどうかの判定が必要ないためです。
ではどういう場合にIsArray関数を使うかというと、Variant型の変数を条件によって配列と変数に使い分けているような場合です。
こういうコードです。
Variant型の変数を用意し、現在時刻の秒が0秒から29秒の場合は配列とし、30秒から59秒の場合は文字列変数としています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub IsArrayTest2() Dim v As Variant '// 秒が1秒から30秒の場合 If Right(Format(Now, "hhmmss"), 2) < "30" Then ReDim v(10) '// 秒が31秒以降の場合 Else v = "abc" End If If IsArray(v) = True Then Debug.Print "IsArray = True" Else Debug.Print "IsArray = False" End If End Sub |
C言語の関数ポインタのように1つの変数で処理を切り替えるような言語もありますが、VBAではそういうことをする機会はなかなかないと思います。
VBAでやるとすれば、1つもしくは複数のクラスとメソッドを用意してCallByName関数を使ったりすれば実現できますが、かなりマニアックなコードになります。
個人的にもIsArray関数を使った記憶が出てきません。
VBAにおいては1つの変数を共用することのメリットよりもデメリットの方が多いと思います。
できればIsArray関数を使うようなコードは見直した方がいいのかもしれませんね。