配列連係

連係というのは今ひとつの表現だが、
配列に値を設定する、逆に配列から値を作る、
という時に一行くらいでスマートにできる方法を例示していく。

配列をある初期値で設定することはよくある。
やり方をいくつか考えてみよう。

array Array(vanum,num,...)

まず普通なのはArray関数を使って引数列を配列に変換します。

Dim a
a = Array("First","Second","Third")
MsgBox a(2)

変数名宣言がa()ではなく、aと言う名前のみというのが気持ち悪い(a()とするとエラーになる)。
また、型名はVariant以外を指定してはならない(だからここでは無指定にしている)。
もっと気持ち悪いのが、Arrayの前に例えばa="abc"のように代入してもエラーにはならない。
一体どういうポリシーで動いているのだろうか。

array Split(str1,str2)

PerlのSplitに似ている。
文字列str1を区切り文字str2で区切って配列を作る。

Dim a As Variant
a = Split("Excel,Word", ",")

Arrayと同じく“a”のところは“a()”とするとエラーになる。

文字列を入れる場合はこのArrayを使うよりこのSplitのほうが楽に書ける。
先の例で言えば

Dim a As Variant
a = Split("First,Second,Third",",")
MsgBox a(2)

とすれば結果は同じになる。

よくある、曜日を漢字で配列に入れるときなどは

Dim a As Variant
a = Split("日,月,火,水,木,金,土",",")

とすればArrayで書くよりかなり楽だ。
なお、区切り文字を空白文字にしても良いだろう。

str Join(array[,str])

次に配列から文字列を作る方法。

配列を区切り文字列で結合して文字列にする。
区切り文字を省略時は空白一文字。

Dim a(1)
a(0)="Excel"
a(1)="Word"
Debug.Print Join(a,",")

結果は 

Excel,Word

PerlのJoinに似ているがVBAの配列の使い勝手の悪さ故、使い勝手は良くない。
配列の数が“合っていない”とあまりうまくない。

Dim a(3)
a(0)="Excel"
a(1)="Word"
Debug.Print Join(a,",")

結果は 

Excel,Word,,

という残念な結果になる。
これを回避するにはきちんとDim a(1)とするか、Redimで修正が必要。

-