- 締切済み
2次元配列を部分的に削除する方法
VBAで配列のデータを部分的に削除してその削除した後のデータを前に詰めたいのです 配列のデータ 001 X 002 Y ←この行を削除した配列にしたい 003 Z 削除後の配列データ 001 X 003 Z こんなイメージなのですが、配列の削除して前につめるという処理はどのように すればいいでしょうか? 1行で実現できるような配列処理用のメソッドがあるのでしょうか? 2次元配列を行削除して前につめる処理なのですがアドバイス下さい
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- MSZ006
- ベストアンサー率38% (390/1011)
通常の配列ですとループを廻してつめていくしかないと思います。 余談ですが、collectionオブジェクトを使うとお望みのようなことができるかもしれません。 サンプルのマクロです。 Sub test() Dim a As Collection Dim b As Collection Set a = New Collection Set b = New Collection a.Add "a" a.Add "b" a.Add "c" b.Add a, "1" Set a = Nothing Set a = New Collection a.Add "A" a.Add "B" a.Add "C" b.Add a, "2" Set a = Nothing Set a = New Collection a.Add "あ" a.Add "い" a.Add "う" b.Add a, "3" MsgBox "最初の状態は・・・" For i = 1 To b.Count For j = 1 To b.Item(i).Count MsgBox "b(" & i & ")(" & j & ")= " & b.Item(i)(j) Next Next b.Item(1).Remove (2) '1行目の2番目の要素を削除 MsgBox "1行目の2番目の要素を削除したら・・・" For i = 1 To b.Count For j = 1 To b.Item(i).Count MsgBox "b(" & i & ")(" & j & ")= " & b.Item(i)(j) Next Next b.Remove (2) '2行目全体を削除 MsgBox "2行目全体を削除したら・・・" For i = 1 To b.Count For j = 1 To b.Item(i).Count MsgBox "a(" & i & ")(" & j & ")= " & b.Item(i)(j) Next Next End Sub
お礼
ありがとうございます collectionオブジェクトを使う方法だと以下の時に困る事がわかりました たとえば DIM V V = range("A2:B100") ・・・・ range("A2:B100") = V のように2次元配列ならEXCELシートの値を配列に 配列の値をEXCELシートに戻すのも簡単ですが collectionオブジェクトだとこの方法が使えなくて・・・