複数シートの列を削除するする時は、For Each(繰り返し処理)で各シートを1つずつ移動しながら、列の削除を行います。
サンプルコードでは、Columnsを使って列削除を行っています。RangeやEntireColumnを使った列削除を行いたい場合は、次の記事を参考にしてください。
【VBA】列を削除する(1列だけ、連続した複数列、離れた複数列)
同じ列を削除する場合
全てのシートで同じ列を削除する場合は、シンプルにシートをFor Eachで移動しながら、対象列を削除します。
コード
1列目をすべてのシートから削除します。
1 2 3 4 5 6 7 8 9 |
'処理対象のシート Dim ws As Worksheet '繰り返し処理でシートを1つずつ移動し、列削除していく For Each ws In Worksheets ws.Columns(1).Delete Next |
解説
サンプルコードでは、繰り返し処理で変数wsにシートが格納されます。
wsには、その時に処理対象となっている1つのシートが格納されています。
繰り返し処理の中で変数wsに格納されているシートの1列目を、Columns(1).Deleteで削除しています。
削除したい列にあわせて、この列番号を修正すれば他の列を削除できます。
セルの値を判定して削除する場合
セルの値を判定して一致する列を削除したい場合は、For Eachで各シートを移動しながら、その中でさらに列を1列ずつ調べながら削除します。
この場合は、条件に一致する列が複数ある場合は、一致する列全てが削除されます。
列を1件ずつ調べて削除する時は、後ろの列から削除していきます。理由は次の記事を参考にしてください。
コード
すべてのシートの1~100列目の中で、1行目のセルの値が×の列を削除します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
'処理対象のシート Dim ws As Worksheet '繰り返し処理でシートを1つずつ移動 For Each ws In Worksheets Dim i As Long '1~100列目を順番に判定し、1行目のセルの値が×の場合に列削除する For i = 100 To 1 Step -1 If ws.Cells(1, i).Value = "×" Then ws.Columns(i).Delete End If Next i Next |
解説
サンプルコードでは、繰り返し処理で変数wsにシートが格納されます。
シートの繰り返し処理(For Each)の中で、さらに列を1列ずつ調べる繰り返し処理(For)を行っています。
1列ずつ調べる繰り返し処理では、ws.Cells(1, i).Valueで対象列の1行目の値を調べ、×の場合に列を削除しています。
列削除の基本や、その他の応用テクニックは下の記事を見てください。
【VBA】列を削除する(1列だけ、連続した複数列、離れた複数列)