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