t-hom’s diary

主にVBAネタを扱っているブログ…とも言えなくなってきたこの頃。

VBA ジャグ配列を通常の配列に展開

今回はジャグ配列[たとえば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

当ブログは、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、 Amazonアソシエイト・プログラムの参加者です。