二次元配列内の指定した列(横方向の要素)を、削除したい場合があります。
今回の記事は特定の〇番目の指定列を行削除するコードを説明します。
二次元配列で〇番目の指定列を削除するサンプルコード
以下の手順で要素を詰めて上書きするイメージです。
①既存配列の列数-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】
コメント