配列を配列の要素にする
配列の配列を作ってみる
配列の要素を配列にすることはできるのか。
やってみた。
準備
Split
関数をラップしたFunctionを作って、簡単にString
型の配列を作れるようにした。
リスト1 標準モジュール
Private Function setArray( _ ByVal spaceSeparatedWords As String) _ As String() Dim ar As Variant ar = Split(spaceSeparatedWords) setArray = ar End Function
単語ごとに半角スペースで区切った文字列を渡したら、それらの単語を格納した配列を返すFunction。
配列を返り値として受け取るときのルールがイマイチよくわかっとらんので、たぶん変なことをしているのだと思う。
これで準備はおしまい。
配列を配列にぶちこんでみる
次のようなコードで実験してみた。
リスト2 標準モジュール
Public Sub test() Dim ar1() As String '……(1)' ar1 = setArray("アホ ボケ カス") Dim ar2() As String ar2 = setArray("クズ ドロボー ロクデナシ") Dim ar3() As String ar3 = setArray("デコスケ ボーフラ ウジムシ") Dim ars(2) As Variant '……(*)' ars(0) = ar1 '……(2)' ars(1) = ar2 ars(2) = ar3 Dim i As Long '……(3)' Dim j As Long For i = 0 To 2 For j = 0 To 2 Debug.Print ars(i)(j) Next Debug.Print String(10, "=") Next End Sub
(*)のところでは、
Dim ars(2) As String
とすると、「型が一致しません」エラーになる。
ぶち込みたいのはString
型の値なのではなく、String
型の配列なのだから当り前だ。
かといって、
Dim ars(2) As String()
としたのではもっとダメ。そもそもコンパイルが通らない。
そんなわけで、今のところVariant
にしている。
見てもらったらわかると思うけれど、(1)からの6行
Dim ar1() As String '……(1)' ar1 = setArray("アホ ボケ カス") Dim ar2() As String ar2 = setArray("クズ ドロボー ロクデナシ") Dim ar3() As String ar3 = setArray("デコスケ ボーフラ ウジムシ")
では、「ar1
」、「ar2
」、「ar3
」というString
型の配列を作っている。
それを(2)からの3行
ars(0) = ar1 ars(1) = ar2 ars(2) = ar3
でVariant
型の配列にぶち込んでいる。
あとは、(3)からの8行
Dim i As Long Dim j As Long For i = 0 To 2 For j = 0 To 2 Debug.Print ars(i)(j) Next Debug.Print String(10, "=") Next
の二重For
ループで、それぞれの配列の値をイミディエイト・ウインドウに出力する。
実行結果
ご覧の通り。
配列に配列をぶち込むことも可能。
さて、どんな用途があるのかのう……。