列を削除
「指定列を消す」「複数列まとめて」「離れた列だけ」「最終列まで」「テーブル列を安全に削除」まで、初心者が迷わない最短コードと注意点を整理します。基本は Columns(…).Delete、Range(…).EntireColumn.Delete を使います。
基本:単一列・複数列の削除
Sub DeleteColumn_Basic()
'B列を削除(右の列が左へ詰まる)
Columns("B").Delete
'列番号で指定(2列目=B列)
Columns(2).Delete
'C〜E列をまとめて削除
Columns("C:E").Delete
End Sub
VB- ポイント:
- 単一列: Columns(“B”) または Columns(2)。結果は同じです。
- 複数列: “C:E” のように範囲指定で一度に削除できます。
離れた列だけを削除(複数範囲)
Sub DeleteColumn_Discontinuous()
'C列とE〜F列をまとめて削除(離れた範囲をカンマで列挙)
Range("C:C,E:F").Delete
End Sub
VB- ポイント:
- 複数範囲: Range(“C:C,E:F”) のように、離れた列も一度に削除可能です。
セルから「その列」を削除
Sub DeleteColumn_FromCell()
'B3セルが属する列を削除
Range("B3").EntireColumn.Delete
End Sub
VB- ポイント:
- EntireColumn: 対象セルの列を確実に削除できます。
動的に「最終列まで」を削除(表の右端が毎回変わるとき)
Sub DeleteColumn_ToLast()
Dim lastCol As Long
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column '1行目の最終列
'B列〜最終列まで削除(見出し構成の整理などに)
Range(Columns(2), Columns(lastCol)).Delete
End Sub
VB- ポイント:
- 最終列取得: End(xlToLeft) は見えている最右の使用列を返します。
- Range + Columns: 数値指定の複数列削除は Range(Columns(2), Columns(3)) の形で書きます。
条件で列を削除(見出し名で探して消す)
Sub DeleteColumn_ByHeader()
Dim f As Range
Set f = Rows(1).Find(What:="削除対象", LookIn:=xlValues, LookAt:=xlWhole)
If Not f Is Nothing Then f.EntireColumn.Delete
End Sub
VB- ポイント:
- Find: 見出し名で列を特定し、安全に削除できる定番パターンです。
テーブル(ListObject)の列を安全に削除
Sub DeleteColumn_FromListObject()
Dim lo As ListObject
Set lo = ActiveSheet.ListObjects("売上テーブル")
'列名を基準に削除(構造化表を壊さない)
lo.ListColumns("備考").Delete
End Sub
VB- ポイント:
- ListColumns.Delete: テーブルは Columns.Delete より専用APIを使うのが安全です。
例題で練習
例題1:不要な項目列(C〜E)を一括削除
Sub Example_DeleteColumnsRange()
Columns("C:E").Delete
End Sub
VB例題2:見出し「メモ」「備考」列があれば削除
Sub Example_DeleteByHeaders()
Dim h As Variant, f As Range, i As Long
h = Array("メモ", "備考")
For i = LBound(h) To UBound(h)
Set f = Rows(1).Find(What:=h(i), LookIn:=xlValues, LookAt:=xlWhole)
If Not f Is Nothing Then f.EntireColumn.Delete
Next
End Sub
VB例題3:B列から最終列まで初期化のため削除
Sub Example_DeleteToLast()
Dim lastCol As Long
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
If lastCol >= 2 Then Range(Columns(2), Columns(lastCol)).Delete
End Sub
VB実務の落とし穴と対策
- 参照ずれ: 列削除は構造が変わる操作。数式の参照がずれる可能性があるため、削除前に対象列と依存列を確認します。
- シート保護: 保護中は削除できません。必要なら解除してから実行します。
- 結合セル: 結合があると削除動作が不安定。結合は最小限にするか解除してから削除します。
- 大量削除で遅い: ScreenUpdating/Calculation を一時的にオフにして高速化し、終わったら戻すのが定石です。
Sub SpeedWrap_DeleteColumns()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'…列削除処理…
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
End Sub
VB