二次元配列内の指定した行(縦方向の要素)を、削除したい場合があります。
今回の記事は特定の〇番目の指定行を行削除するコードを説明します。
二次元配列で〇番目の指定行を削除するサンプルコード
コレクションの 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】




コメント