「vba 変数が配列になっているか判定」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。
Excel VBA(Visual Basic for Applications)では、変数をVariant型で宣言しておいて、後からデータを一気に格納することで配列にするということが、結構行われます。
そのような処理の含まれるプロシージャを作っているときに、変数が配列になっているかどうかを判定するにはどうしたらいいのか探していらしたのでしょう。
IsArray関数で配列かどうかを判定するサンプルマクロ
結論からいうと、VBAではIsArray関数で配列かどうかを判定することができます。
IsArray関数は、引数に指定された変数が配列ならばTrueを、配列でなければFalseを返してきます。
以下のマクロを実行してIsArray関数の動きを確認しておくことをおすすめします。
Dim arr As Variant
Dim bln As Boolean
bln = IsArray(arr)
Stop
arr = Array("a", "b", "c")
bln = IsArray(arr)
Stop
サンプルマクロの解説
VBE(Visual Basic Editor)のメニュー[表示]-[ローカルウィンドウ]から、ローカルウィンドウを表示して上記のマクロを実行してみてください。
一つ目のStop文でステップ実行モードになったところで、ローカルウィンドウを確認すると下図のような状態になっているはずです。
変数・arrは、まだ宣言されただけですから、バリアント型の変数のままで、IsArray関数の結果の代入されている変数・blnはFalseです。
上記の状態を確認してから[F5]キーでSubプロシージャの実行を継続すると二つ目のStop文で再度ステップ実行モードになります。
この時点で、ローカルウィンドウを確認すると今度は下図のような状態になっているはずです。
変数・arrは、
arr = Array("a", "b", "c")
の行が実行されたことで配列変数になって各要素にデータが格納され、IsArray関数の結果の代入されている変数・blnはTrueになっています。
判定用の関数はIs○○という名前のことが多い
ちなみに、VBAに限らずプログラミング言語では、何らかの判定を行う関数やメソッドは、Is○○という名前になっていることが少なくありません。
VBAの場合は、オブジェクトブラウザー等で確認するとわかるとおり、Informationモジュールに下図のような、Is○○という名前の関数が用意されています。
Home » エクセルマクロ・Excel VBAの使い方 » 配列 » VBAで変数が配列かどうかを判定する-IsArray関数