ザ・40字…第3回「ズボン」
異様にコメントの食いつきが良いこの企画ですが、勢いで第3回目に行ってみたいと思います。
続きを読む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:少なくともこの使い方では。
ザ・40字…第2回「幼馴染」
第一回目のお題を自分がこさ氏に出題し、相互回答したあと「じゃあ今度はこちらから問題を出しますね」と切り返されたのがこの問題です(汗)。
続きを読むザ・40字…第1回「同人誌」
このカテゴリは、資格試験の勉強や仕事上の調べ物関係などを記録するために使っていこうと思っています。
続きを読む