配列(一次元/二次元)

二次元配列にヘッダー(一次元配列で準備)を追加する処理をパーツ化する【ExcelVBA】

二次元配列内でデータ処理した後、エクセルに反映する前にヘッダー行を付与したいケースがあります。
今回の記事は、データの2次元配列とヘッダーの1次元配列を準備し、結合するコードを説明します。

二次元配列にヘッダー(一次元配列で準備)を追加するコード

以下の手順で要素を詰めて上書きするイメージです。
①既存配列の行数+1でtmpを定義。
②ヘッダー行は1次元配列を書込し、それ以降はデータ行の2次元配列を一つ前の要素を書込みする。

'■二次元配列の先頭にヘッダー行を追加する
Public Function call_Array2D_HeaderAdd(tmp1 As Variant, arr1D As Variant)
    '■元の配列(tmp1)より列を一つ大きく定義する
    Dim tmp2 As Variant: ReDim tmp2(UBound(tmp1, 1) + 1, UBound(tmp1, 2))
    
    Dim sHeader As Long: sHeader = LBound(tmp2, 1)
      
    Dim flg As Long: flg = 0
    Dim r As Long
    Dim c As Long
    For r = sHeader To UBound(tmp2, 1)
        '■ヘッダーの場合はarr1Dをコピー
        If r = sHeader Then
            For c = LBound(arr1D) To UBound(arr1D)
                tmp2(r, c) = arr1D(c)
            Next
            flg = 1
        '■ヘッダー以外(中身のデータ)の場合はtmp1をコピー
        Else
            For c = LBound(tmp2, 2) To UBound(tmp2, 2)
                tmp2(r, c) = tmp1(r - flg, c)
            Next
        End If
    Next
    call_Array2D_HeaderAdd = tmp2
End Function

実際の使い方は以下のように使用します。

Public Sub test()
    Dim data() As Variant
    ReDim data(2, 2)
    data(0, 0) = 1
    data(0, 1) = "あ"
    data(0, 2) = "A"                    '1 あ A
    data(1, 0) = 2
    data(1, 1) = "い"                   '2 い B
    data(1, 2) = "B"
    data(2, 0) = 3                      '3 う C
    data(2, 1) = "う"
    data(2, 2) = "C"
     
     
    data = call_Array2D_HeaderAdd(data, Array("数字", "ひらがな", "アルファベット"))
    '1  あ A
    '2  い B
    '3  う C
    '↓↓↓
    '数字 ひらがな アルファベット
    '1  あ A
    '2  い B
    '3  う C
     
    '「数字」「ひらがな」「アルファベット」のヘッダー行を追加する
 
End Sub

注意点

  • ヘッダー行の要素数ととデータ行の2次元目の要素数は同一で進めています。

関連記事

コメント

タイトルとURLをコピーしました