配列(一次元/二次元)

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

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

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

以下の手順で要素を詰めて上書きするイメージです。
①既存配列の列数-1でtempを定義
②配列を〇番目の要素が来たら、その次の要素を書込みする。

'■二次元配列内の〇番目の列を削除する
Public Function Call_Array2D_RemoveColumn(arr As Variant, DelCol 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, cMin To cMax - 1)
                    
    Dim R As Long               '二次元配列のRow要素
    Dim C As Long               '二次元配列のColumn要素
    Dim i As Long: i = rMin     '二次元配列のColumn要素(元配列arr)
    
    '■配列要素が削除列ならi+1をして飛ばす
    For R = rMin To rMax
        For C = cMin To cMax - 1
            If C = DelCol Then
                i = i + 1
            End If
            temp(R, C) = arr(R, i)
            i = i + 1
        Next C
            i = rMin
    Next R

    Call_Array2D_RemoveColumn = temp
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"
    
    
    '■0を指定したのでの1番目「1、2、3」の列を削除
    data = Call_Array2D_RemoveColumn(data, 0)
    data(0, 0) = 1
    data(0, 1) = "A"
    data(1, 0) = 2                      '1  A
    data(1, 1) = "B"                    '2  B
    data(2, 0) = 3                      '3  C
    data(2, 1) = "C"
End Sub

関連記事

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

コメント

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