空配列

空配列を作るにはArray() とすれば良い。

動的配列を利用する場合、ある処理でいったん消して、別の処理でその配列が消されていたら再定義を行いたいことがあった。
意外と困ったのは「消されていたら」の判定である。

まず、消すという処理をEraseを使うと考えたのが間違いだった。
Eraseを使ったとして、どうやって「消されていたら」と判定するのかに困った。
IsArrayがまず浮かぶが、一度定義したのちにEraseで消した変数名に対しては、True(定義されている)と判断してしまう。
配列とみなされているのならと、LBound/UBoundを使おうとすると、それは配列ではないとしてエラーになってしまう。

答えは最初に書いてあるとおり、空配列を代入してやれば良いだけ。
消すのではなく、空(配列サイズが0)にする。
空になっているかどうかの判定はUBoundで調べれば良い。
空の場合は-1を返す。この時、LBoundは0。
配列サイズはUBound()-LBound()+1で求められるが、0となり辻褄も合っている。
以下のプログラムで確認できる。
Dim a
a = Array(1,2,3)
Debug.Print LBound(a),UBound(a)
a = Array()
Debug.Print LBound(a),UBound(a)


なお、代わりにSplit("")でも良い。
Splitは区切り文字を省略できて、その場合は半角空白文字を区切り文字とする。
空文字を与えているので空の配列となる。
-