Excelで条件に基づいて列を削除するVBAマクロ|8つの実例で徹底解説
VBAマクロの活用は、Excelであらゆる操作を実行する上で最も効率的・迅速・安全な方法です。本記事では、VBAマクロを使用して、Excelでさまざまな条件に基づいて列を削除する方法を、具体的なコード例とともに詳しく解説します。
練習用ワークブックのダウンロード
無料の練習用Excelワークブックはこちらからダウンロードできます。
基本構文
VBAでExcelの列を削除する際の基本構文は以下のとおりです。
Columns(列番号/列アドレス).Delete
条件に基づいて列を削除する8つのVBAマクロ実例
このセクションでは、セルの値、別のワークシート、テーブルなどを条件として、VBAマクロで列を削除する方法を段階的に学びます。
以下のデータセットを例として使用します。

条件1: セルの値に基づいて列を削除するVBAマクロ
VBAを使ってセルの値に基づいて列を削除する手順は以下のとおりです。
手順:
- キーボードでAlt + F11を押すか、リボンの開発 -> Visual Basicを選択して、Visual Basic Editor(VBE)を開きます。

- 表示されたコードウィンドウで、メニューバーから挿入 -> 標準モジュールをクリックします。

- 以下のコードをコピーして、コードウィンドウに貼り付けます。
Sub DeleteColumnsBasedOnCellValue()
Dim iCol As Long
Dim iWrk As Long
iCol = 10
For iWrk = iCol To 1 Step -1
If Cells(1, iWrk) = 2 Then
Columns(iWrk).Delete
End If
Next
End Sub
これでコードを実行する準備が整いました。このコードは、先頭行のセル値が2である列をすべて削除します。

- キーボードのF5キーを押すか、メニューバーから実行 -> Sub/ユーザーフォームの実行を選択してマクロを実行します。サブメニューバーの再生アイコンをクリックして実行することも可能です。

実行結果は以下のとおりです。

先頭セルの値が2の列がすべて削除されました。
関連記事: Excelで列を削除するVBA
条件2: 空白セルを含む列を削除するVBAマクロ
VBAを使って空白セルを含む列を削除する手順は以下のとおりです。
手順:
- 前述の手順と同様に、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- コードウィンドウに、以下のコードをコピーして貼り付けます。
Sub DeleteBlankCells()
Range("A1:J10").Select '//データセットの範囲
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.EntireColumn.Delete
End Sub
これでコードを実行する準備が整いました。

- マクロを実行します。

空白セルを含むすべての列が削除されました。
条件3: 空白列そのものを削除するVBAマクロ
次に、空白列を含むデータセットを見てみましょう。VBAマクロを使ってこれらの空白列を削除する方法を解説します。

手順:
- 前述の手順と同様に、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- コードウィンドウに、以下のコードをコピーして貼り付けます。
Sub DeleteBlankCol()
Dim i As Integer
For i = 1 To 4
Columns(i + 1).Delete
Next i
End Sub
これでコードを実行する準備が整いました。

- マクロを実行します。

空白列がすべて削除されました。
関連記事: Excelで空白列を削除する方法
条件4: 隣接していない複数の列を削除するVBAマクロ
VBAを使って隣接していない複数の列を削除する手順は以下のとおりです。
手順:
- 前述の手順と同様に、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- コードウィンドウに、以下のコードをコピーして貼り付けます。
Sub DeleteNAdjCol()
Range("C:E, G:I").Delete
End Sub
これでコードを実行する準備が整いました。

- マクロを実行します。

C列からE列(2月〜4月)およびG列からI列(6月〜8月)の列がすべて削除されました。
あわせて読みたい記事:
- Excelで未使用の列を削除する方法(最も簡単な5つの方法)
- 数式に影響を与えずにExcelの列を削除する(2つの方法)
- Excelで重複する列を削除する方法(6つの方法)
条件5: 特定のワークシートから列を削除するVBAマクロ
VBAを使って特定のワークシートから列を削除する手順は以下のとおりです。
手順:
- 前述の手順と同様に、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- コードウィンドウに、以下のコードをコピーして貼り付けます。
Sub DeleteColFromSheet()
Worksheets("New Column").Select '//シート名を設定
Columns("D:F").Delete
End Sub
これでコードを実行する準備が整いました。

- マクロを実行します。

「New Column」ワークシートのD列からF列(3月〜5月)の列がすべて削除されました。
条件6: テーブルから列を削除するVBAマクロ
VBAを使ってテーブルから列を削除する手順は以下のとおりです。
手順:
- 前述の手順と同様に、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- コードウィンドウに、以下のコードをコピーして貼り付けます。
Sub DeleteColTable()
Dim srcTable As ListObject
Dim srcSheet As Worksheet
'削除対象の列を含むテーブルを設定
Set srcTable = ActiveSheet.ListObjects("ExTable")
'テーブルが存在するシートを設定
Set srcSheet = Sheet8
With srcSheet
srcTable.ListColumns(5).Delete
End With
End Sub
これでコードを実行する準備が整いました。

- マクロを実行します。

テーブルから5列目(4月)が削除されました。
条件7: テーブルから複数の列を削除するVBAマクロ
VBAを使ってテーブルから複数の列を削除する手順は以下のとおりです。
手順:
- 前述の手順と同様に、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- コードウィンドウに、以下のコードをコピーして貼り付けます。
Sub DeleteMColTable()
Dim srcTable As ListObject
Dim srcSheet As Worksheet
Dim i As Integer
'削除対象の列を含むテーブルを設定
Set srcTable = ActiveSheet.ListObjects("ExTable2")
'テーブルが存在するシートを設定
Set srcSheet = Sheet9
'2列削除する必要があるため、ループを2回実行
For i = 1 To 2
With Source
srcTable.ListColumns(5).Delete
End With
Next i
End Sub
これでコードを実行する準備が整いました。

- マクロを実行します。

テーブルから5列目と6列目(4月と5月)が削除されました。
関連記事: Excelで複数の列を削除する方法
条件8: 列見出しに基づいてテーブルから列を削除するVBAマクロ
VBAを使って列見出しに基づいてテーブルから列を削除する手順は以下のとおりです。
手順:
- 前述の手順と同様に、開発タブからVisual Basic Editorを開き、コードウィンドウに標準モジュールを挿入します。
- コードウィンドウに、以下のコードをコピーして貼り付けます。
Sub DeleteColHeaderTable()
Dim srcTable As ListObject
Dim srcSheet As Worksheet
Dim i As Integer
Dim colName As String
'削除対象の列を含むテーブルを設定
Set srcTable = ActiveSheet.ListObjects("ExTable3")
'テーブルが存在するシートを設定
Set srcSheet = Sheet10
'大文字小文字を区別
colName = "Apr"
'テーブル内のすべての列をループ
For i = 1 To srcTable.ListColumns.Count
With srcSheet
'列見出しを確認
If srcTable.ListColumns(i).Name = colName Then
srcTable.ListColumns(i).Delete
Exit For
End If
End With
Next i
End Sub
これでコードを実行する準備が整いました。

- マクロを実行します。

「Apr」という名前の列見出しを持つ列がテーブルから削除されました。
まとめ
本記事では、VBAマクロを使って、Excelで8つの異なる条件に基づいて列を削除する方法をご紹介しました。セルの値や空白セル、テーブル、列見出しなど、目的に応じたコードを使い分けることで、作業効率を大幅に向上させることができます。この記事が皆様のお役に立てば幸いです。ご不明な点があれば、お気軽にお問い合わせください。
あわせて読みたいおすすめ記事
- 数式を削除せずにExcelの内容をクリアする方法(3つの方法)
- Excelで余分な列を削除する(7つの方法)
-
Excel VBAでオートフィルターが存在する場合に削除する7つの方法
Microsoft Excelでは、ワークシートやテーブルからオートフィルターを削除する方法が複数用意されています。この記事では、VBAコードを使って、Excelでオートフィルターが存在する場合にそれを削除する7つの方法を解説します。 以下のリンクからサンプルのExcelファイルをダウンロードして、実際に手を動かしながら学習することもできます。 VBAでオートフィルターを削除する7つの具体例 1. アクティブなワークシートからオートフィルターを削除する 次のスクリーンショットは、アクティブなワークシートに適用されているオートフィルターです。これをVBAコードで削除していきます。 アクティブな
-
Excelで条件に基づいて行を列に転置する方法(数式・VBAの2つのアプローチ)
通常、行を列に変換したい場合にはTRANSPOSE関数がよく利用されます。しかし、TRANSPOSE関数では「一意の値(ユニークな値)だけを抜き出す」といった特定の条件に基づいた結果を返すことができません。そこで本記事では、Excelで条件に基づいて行を列に転置する方法をわかりやすく解説します。 Excelで条件に基づいて行を列に転置する2つの便利な方法 以下の図には、複数の商品名とそれぞれの数量をまとめたサンプルデータセットを用意しました。ここから行を列へ転置していきます。データ内には同一商品の重複行が含まれているため、一意の値を条件として転置処理を行います。 まずはINDEX関数・MATC