VBAで多次元配列(のようなもの)*1を初期化子でまとめて初期化するには
C言語等で、多次元配列宣言時に初期化子を用いてまとめて初期化する場合、
int test={{1,2},{3,4}};
のようにすればよいわけですが…同様のことをVBAでやろうと調べてみたら、結構トリッキーなことをやらないと出来ないっぽいことが分かったのでメモ。
Option Explicit Sub ComplexArrayTest() Dim test() As Variant Dim i As Long, j As Long, k As Long Dim result As String test = Array(Array(Array(1, 2), Array(3, 4)), Array(Array(5, 6, 7), Array(8, 9, 10))) For i = LBound(test) To UBound(test) For j = LBound(test(i)) To UBound(test(i)) For k = LBound(test(i)(j)) To UBound(test(i)(j)) result = result & "(" & i & "," & j & "," & k & ")=" & test(i)(j)(k) & vbCrLf Next k Next j Next i MsgBox result End Sub
上記の様に記述すれば、多次元配列(のようなもの)を初期化子で初期化できるようです(Excel2003.Excel2007で動作確認)。真面目に読もうとすれば分かると思うのですが、トリッキーなことをやってます。良く見ると、配列の要素数も一定でなかったりと、割とフリーダムな作りになっています。
なお、配列(のようなもの)の型はVariant型しか使用できないようです*1。まあ「なぜこのコードが動くか」を考えれば自然に分かるとは思います。…きっと。(汗)
*1:少なくともこの使い方では。