今回はジャグ配列[たとえばArray(Array(1,2), Array(3,4,5))]を普通の配列[Array(1,2,3,4,5)]になおす為のプログラムを作成してみた。
ジャグ配列については以下を参照
thom.hateblo.jp
コードは以下のとおり。
Sub 配列展開(x As Variant, ByRef arr2() As Variant) If IsArray(x) Then For i = LBound(x) To UBound(x) Call 配列展開(x(i), arr2) Next Else arr2(UBound(arr2)) = x ReDim Preserve arr2(UBound(arr2) + 1) End If End Sub
このコードは最初の引数xがジャグ配列である。
2つめのarr2は空の動的配列を受け取り、展開後のふつうの配列を格納する。
実際に使ってみたのが次のコード
Sub Sample() Dim arr: arr = Array(Array(Array(Array(Array(1, 2, 3), 4, 5), 6, 7), 8), 9) Dim arr2() As Variant: ReDim arr2(0) Call 配列展開(arr, arr2) ReDim Preserve arr2(UBound(arr2) - 1) For Each x In arr2 Debug.Print x Next End Sub
配列の中に配列がずらっと格納されているが、出力されるarr2は普通の配列に戻っている。
動的配列arr2の拡張について、今回使ったテクニックを以下の記事で解説しているので、興味がある方はどうぞ。
thom.hateblo.jp