配列操作

二次元配列で〇番目の行を削除する【ExcelVBA】

二次元配列内の指定した行(縦方向の要素)を、削除したい場合があります。
今回の記事は特定の〇番目の指定行を行削除するコードを説明します。

二次元配列で〇番目の指定行を削除するサンプルコード

コレクションの remove メソッドは配列に存在していません。

以下の手順で要素を詰めて上書きするイメージです。
①配列を〇番目以降の要素からループさせ上書きする。
②Redim Preserveで配列を再定義(最終の要素をなくす)する。

'■二次元配列内の〇番目の行を削除する
Public Function Call_Array2D_Remove(arr As Variant, DelRow As Long)
    
    Dim rMin As Long: rMin = LBound(arr, 1)
    Dim rMax As Long: rMax = UBound(arr, 1)
    Dim cMin As Long: cMin = LBound(arr, 2)
    Dim cMax As Long: cMax = UBound(arr, 2)
    
    '■縦方向の要素を最大値-1で1行少ない状態で定義
    Dim temp As Variant
    ReDim temp(rMin To rMax - 1, cMin To cMax)
                    
    Dim R As Long               '二次元配列のRow要素
    Dim C As Long               '二次元配列のColumn要素
    Dim i As Long: i = rMin     '二次元配列のRow要素(元配列arr)
    
    For R = rMin To rMax - 1
        '■配列要素が削除行ならi+1をして飛ばす
        If R = DelRow Then
            i = i + 1
        End If
        For C = cMin To cMax
            temp(R, C) = arr(i, C)
        Next C
        i = i + 1
    Next R
    
    Call_Array2D_Remove = temp
End Function

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

Public Sub test()
    Dim data() As Variant
    ReDim data(2, 2)
    data(0, 0) = 1
    data(0, 1) = 2
    data(0, 2) = 3
    data(1, 0) = "あ"
    data(1, 1) = "い"
    data(1, 2) = "う"
    data(2, 0) = "A"
    data(2, 1) = "B"
    data(2, 2) = "C"
    
    
    '■1を指定したのでの2番目(0から数えて2つ目の1)「あ、い、う」を削除
    data = Call_Array2D_Remove(data, 1)
    'data(0, 0) = 1
    'data(0, 1) = 2
    'data(0, 2) = 3
    'data(1, 0) = "A"
    'data(1, 1) = "B"
    'data(1, 2) = "C"
End Sub

関連記事

一次元/二次元配列の要素数の最大値を取得する【Ubound関数】
配列の宣言(静的/動的/1次元/2次元)【ExcelVBA】
一次元配列で〇番目の指定要素を削除する【ExcelVBA】

コメント

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