結論:
列削除の基本は Columns("B").EntireColumn.Delete の形を覚えること。
これをベースに「固定の列」「複数列」「ヘッダー名で自動判定」の3パターンを書ければ、実務の列削除はほぼ自動化できます。
この記事は、
- そもそもVBAの文法があやしい
- とにかく「列を削除するマクロ」を1本作りたい
- 毎回手で列削除していてダルいので、自動化したい
という人向けです。
以下の流れで進めます(How-to記事の型:結論→前提→手順→詰まりポイント→自動化ポイントで構成しています)。
- この記事の結論(何を覚えればいいか)
- 前提:今回使う環境と準備
- 基本①:決まった1列だけ削除するマクロ
- 基本②:複数の列を一度に削除するマクロ
- 応用:ヘッダー名で判定して列削除を自動化するマクロ
- マクロをワンクリックで実行する設定
- よくあるハマりポイントと対策
- 自動化として使い回すコツ
1. この記事の結論
列削除で覚えるVBAの核はこれだけです。
Columns("B").EntireColumn.Delete
Columns("B")… B列を表す.EntireColumn… 「そのセル/列が含まれる列全体」を指す.Delete… 削除
応用では、
- 列番号で指定:
Columns(2).EntireColumn.Delete - 複数列指定:
Columns("B:B,D:D").EntireColumn.Delete - 右から左へループして条件付きで削除
というパターンに広げます。
2. 前提:今回使う環境と準備
2-1. 想定環境
- Excel:Windows版(Office 2016 以降を想定)
- ブック:マクロ有効ブック(拡張子
.xlsm)
2-2. 開発タブを出す
- Excelの「ファイル」→「オプション」
- 「リボンのユーザー設定」
- 右側の一覧から「開発」にチェック
- OK
2-3. マクロを書く場所
- 開発タブ →「Visual Basic」 もしくは
Alt + F11 - メニュー「挿入」→「標準モジュール」
- 右側の白い画面にコードを書いていく
3. 基本①:決まった1列だけ削除するマクロ
3-1. B列を削除する最小コード
例:アクティブシートの B 列を削除
Sub DeleteColB()
Columns("B").EntireColumn.Delete
End Sub
これで、
- アクティブなシートの
- B列が丸ごと削除されます。
3-2. 特定のシートの列を削除する
「どのシートか」を固定しておくと、誤削除のリスクが下がります。
Sub DeleteColB_FromDataSheet()
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("データ") ' ←シート名は自分のブックに合わせて
ws.Columns("B").EntireColumn.Delete
End Sub
ポイント:
ThisWorkbook:このマクロが保存されているブックWorksheets("データ"):シート名でシートを指定
3-3. 列番号で指定したい場合
B列は「2列目」なので、列番号でも指定できます。
Sub DeleteCol2()
Columns(2).EntireColumn.Delete
End Sub
- 「列番号で覚える」か「アルファベットで覚える」かは好みですが、
実務では「ヘッダー名で探す」方が安全なので、応用でそちらも紹介します。
4. 基本②:複数の列を一度に削除するマクロ
4-1. B列とD列を同時に削除
Sub DeleteCols_B_and_D()
Columns("B:B,D:D").EntireColumn.Delete
End Sub
"B:B,D:D"のようにカンマ区切りで列を指定すると、一気に消えます。
4-2. 連続した列を削除(C~E列など)
Sub DeleteCols_C_to_E()
Columns("C:E").EntireColumn.Delete
End Sub
"C:E"は C列~E列までの範囲を意味します。
5. 応用:ヘッダー名で判定して列を自動削除する
ここからが「ちゃんとした自動化」です。
毎月の仕訳データやダウンロードデータで、
- 列の並びが変わる
- でも「不要な列のヘッダー名」は決まっている
という場合に使えます。
5-1. 仕様を決める
前提:
- 1行目がヘッダー行
- シート名:
"データ" - 削除したい列のヘッダー名:例として
"メモ""更新日時""使わない列"
5-2. コード例:ヘッダー名を見て列削除
Sub DeleteCols_ByHeader()
Dim ws As Worksheet
Dim lastCol As Long
Dim c As Long
Set ws = ThisWorkbook.Worksheets("データ")
' 最終列を取得(1行目の右端を探す)
lastCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
' 右から左へループするのがポイント
For c = lastCol To 1 Step -1
Select Case ws.Cells(1, c).Value
Case "メモ", "更新日時", "使わない列"
ws.Columns(c).EntireColumn.Delete
End Select
Next c
End Sub
なぜ「右から左へ」ループするのか
- 左から右に削除していくと、列が詰まって番号がずれます
(例:B列を消した瞬間、C列がB列になる)。 - 右から左(
Step -1)で回すと、削除しても「まだ見ていない列」の番号は変わりません。
列削除ループの基本パターンとして覚えておいてください。
6. マクロをワンクリックで実行する設定
毎回VBEを開いて F5 は面倒なので、ボタンを置いてしまいます。
「ボタン1回=不要列削除完了」という状態まで作ると、自動化として使いやすくなります。
6-1. シート上にボタンを置く
- Excelに戻る
- 開発タブ →「挿入」
- 「フォームコントロール」の「ボタン」を選択
- シート上でドラッグしてボタンを配置
- 「マクロの登録」ダイアログが出るので
先ほど作ったDeleteCols_ByHeaderなどのマクロを選択して「OK」 - ボタンの文字を「不要列削除」などに変更
これで、ボタンをクリックするだけで列削除マクロが走ります。
7. よくあるハマりポイントと対策
7-1. 「削除したくない列まで消えた」
原因:
- 対象列の指定がざっくりしすぎている
- シート名を固定せずに、アクティブシートに対して削除している
対策:
- 必ずテスト用シート/テスト用ファイルで試す
- 実運用では「シート名を固定」する
Set ws = ThisWorkbook.Worksheets("データ")
ws.Columns("B").EntireColumn.Delete
7-2. 「ヘッダー名のタイプミスで何も消えない」
対策:
- 実データのヘッダー名をコピーして、コードに貼る(手入力しない)
- 余計なスペースが入っていないか確認(
"更新日時 "などになっていないか)
必要なら、Trim を使って前後のスペースを削る方法もあります。
If Trim(ws.Cells(1, c).Value) = "更新日時" Then
ws.Columns(c).EntireColumn.Delete
End If
7-3. 「マクロを保存したつもりが消えた」
原因:
- 普通のブック(
.xlsx)で保存している
対策:
- 必ず「マクロ有効ブック(
.xlsm)」で保存する
8. 自動化として使い回すコツ
列削除を「自動化のパーツ」として設計しておくと、他の処理(フィルタ・並べ替え・集計)と組み合わせやすくなります。
自動化ブログ用のHow-toコンテンツとしても、「結論→前提→手順→詰まりポイント→自動化ポイント」という型にしておくと、量産・テンプレート化しやすいです。
おすすめの分割方法:
- 前処理マクロ
- 不要な列を削除
- 不要な行を削除
- 整形マクロ
- ヘッダーの名前を統一
- 型の変換(日付・数値など)
- 集計マクロ
- ピボットテーブル作成 or SUMIF/SUMIFS 等で集計
列削除マクロは「前処理」の最初に置くのが基本です。
まとめ
- 列削除の基本コードは
Columns("B").EntireColumn.Delete - 実務では
- シート指定
- 複数列削除
- ヘッダー名で判定して削除
を組み合わせる
- 右から左(
For c = lastCol To 1 Step -1)でループするのが安全 - ボタンにマクロを割り当てて、「クリック1回で不要列削除」の状態を作ると、自動化として機能する
まずはこの記事のコードを、そのまま自分のブックにコピーして動かし、
そのあとで「削除したい列名」や「シート名」を自分の環境に合わせて書き換えるところから始めてください。

コメント