【VBA超入門】列を削除するコードの書き方と、自動化マクロ3パターン

仕事の自動化(事務作業)

結論:
列削除の基本は Columns("B").EntireColumn.Delete の形を覚えること。
これをベースに「固定の列」「複数列」「ヘッダー名で自動判定」の3パターンを書ければ、実務の列削除はほぼ自動化できます。

この記事は、

  • そもそもVBAの文法があやしい
  • とにかく「列を削除するマクロ」を1本作りたい
  • 毎回手で列削除していてダルいので、自動化したい

という人向けです。

以下の流れで進めます(How-to記事の型:結論→前提→手順→詰まりポイント→自動化ポイントで構成しています)。

  1. この記事の結論(何を覚えればいいか)
  2. 前提:今回使う環境と準備
  3. 基本①:決まった1列だけ削除するマクロ
  4. 基本②:複数の列を一度に削除するマクロ
  5. 応用:ヘッダー名で判定して列削除を自動化するマクロ
  6. マクロをワンクリックで実行する設定
  7. よくあるハマりポイントと対策
  8. 自動化として使い回すコツ

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. 開発タブを出す

  1. Excelの「ファイル」→「オプション」
  2. 「リボンのユーザー設定」
  3. 右側の一覧から「開発」にチェック
  4. OK

2-3. マクロを書く場所

  1. 開発タブ →「Visual Basic」 もしくは Alt + F11
  2. メニュー「挿入」→「標準モジュール」
  3. 右側の白い画面にコードを書いていく

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. シート上にボタンを置く

  1. Excelに戻る
  2. 開発タブ →「挿入」
  3. 「フォームコントロール」の「ボタン」を選択
  4. シート上でドラッグしてボタンを配置
  5. 「マクロの登録」ダイアログが出るので
    先ほど作った DeleteCols_ByHeader などのマクロを選択して「OK」
  6. ボタンの文字を「不要列削除」などに変更

これで、ボタンをクリックするだけで列削除マクロが走ります。


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コンテンツとしても、「結論→前提→手順→詰まりポイント→自動化ポイント」という型にしておくと、量産・テンプレート化しやすいです。

おすすめの分割方法:

  1. 前処理マクロ
    • 不要な列を削除
    • 不要な行を削除
  2. 整形マクロ
    • ヘッダーの名前を統一
    • 型の変換(日付・数値など)
  3. 集計マクロ
    • ピボットテーブル作成 or SUMIF/SUMIFS 等で集計

列削除マクロは「前処理」の最初に置くのが基本です。


まとめ

  • 列削除の基本コードは
    Columns("B").EntireColumn.Delete
  • 実務では
    • シート指定
    • 複数列削除
    • ヘッダー名で判定して削除
      を組み合わせる
  • 右から左(For c = lastCol To 1 Step -1)でループするのが安全
  • ボタンにマクロを割り当てて、「クリック1回で不要列削除」の状態を作ると、自動化として機能する

まずはこの記事のコードを、そのまま自分のブックにコピーして動かし、
そのあとで「削除したい列名」や「シート名」を自分の環境に合わせて書き換えるところから始めてください。

コメント

タイトルとURLをコピーしました