Excelで大量のデータを含む表を編集する際、「『キャンセル』と書かれた行を一括削除したい」「特定の製品名を含む行だけをリストから除外したい」といった場面は頻繁に発生します。データ数が少なければ手作業で1行ずつ削除することもできますが、数百行、数万行に及ぶデータでそれを行うと時間がかかるだけでなく、必要なデータまで誤って削除してしまうリスクが高まります。
Excelで特定の文字を含む行を一括で綺麗に削除するには、最も手軽に操作できる「フィルター機能を使った手動削除」と、大量データや繰り返し作業を一瞬で自動化する「VBA(マクロ)を使った自動削除」の2つの効果的なアプローチがあります。今回は、操作画面に沿って今すぐできる基本手順から、実務のスピードを圧倒的に加速させるマスタ自動処理マクロの作成方法までを図解します。行削除のノウハウをマスターして、無駄なデータ整理作業から解放され、定時退勤を実現しましょう!
- 手作業で行削除を行うと行ズレや誤削除の原因になるため、フィルターかVBAで処理するのが安全なこと
- 基本編:Excelの標準機能である「フィルター」で削除したい文字を抽出し、一括で行削除するのが最も簡単な手順であること
- 応用編:VBAマクロを使用すれば、ボタン一つで数万行のデータから対象文字列を含む行をミリ秒単位で一括削除できること
- マクロで下から上に向かってループ処理(Step -1)を行う理由は、削除による行インデックスのズレ(行飛ばし)を防ぐための必須テクニックであること
ジャンプできる目次📖
特定の文字を含む行を削除する2つのアプローチ

Excelで条件に一致する行を一括削除するためのアプローチは、データの規模や作業の頻度に応じて「フィルター機能」と「VBAマクロ」を使い分けるのがベストプラクティスです。それぞれの特徴と違いを理解しておきましょう。
フィルター手動削除とVBA自動削除の使い分け
第1の基本アプローチは、Excelの標準機能である「オートフィルター」を活用する手法です。対象の列で「テキストフィルター > 指定の値を含む」を設定し、抽出された行(非表示行を除く可視セル)を選択して一括削除します。特別な知識が不要で、数万行程度までのデータであればこの方法で十分に素早く処理できます。
第2の応用アプローチは、「VBAマクロ」を実行する手法です。下から上へ行をスキャンし、特定の文字列が含まれる場合にその行を自動的に削除するコードを実行します。マクロを一度登録しておけば、毎日発生するデータクレンジング作業を完全に自動化でき、手動操作の余計なミスやフリーズの心配もありません。
以下に、Excelにおける2つの行削除アプローチのメリットと注意点を整理しました。
| 削除の手法 | マクロ知識 | 作業スピード | 動作の安定性(重さ) | 実務での推奨シーン |
|---|---|---|---|---|
| オートフィルター方式 | 不要 | 早い(数十秒で完了) | 非常に軽い(通常の並び替えや抽出のみ) | 単発の作業や、VBAが使えない環境(共有制限など)の場合 |
| VBAマクロ自動化方式 | 必要 | 一瞬(ボタンクリックで完結) | 極めて早い(大容量データも一瞬でクレンジング可能) | 定期的に同じ形式 of データクレンジングを行う業務 |
作業の頻度やデータの重要度に合わせて使い分けることが、ミスなく仕事を素早く終えるコツです。次の章から、まずは誰でも今すぐ使えるフィルター機能による行削除の基本ステップを詳しく解説します!
何百行もある表を下に向かってスクロールしながら、特定の文字列を目視で探して「右クリック > 行削除」を繰り返す作業は、最も避けるべき時間の無駄遣いです。こうした単純な作業は、Excelの標準機能やコードに任せて数秒で終わらせましょう。頭を使わない手作業を減らすことこそが、定時退勤への最も確実な近道です。
【基本編】フィルター機能を使って特定の文字を含む行を絞り込んで削除する手順
最も手軽で、関数やプログラミングの知識がない人でも今すぐ実践できるのが、Excelの「オートフィルター」を使った一括削除方法です。操作手順を図解します。

ステップ1:データ範囲にフィルターを設定する
まず、対象となるデータが入っている表の任意のセルを選択します。次に、リボンの「データ」タブ > 「フィルター」ボタンをクリックします(ショートカットキー Ctrl + Shift + L でも切り替え可能です)。
表の見出し行(1行目)の各セルに、下向きの三角ボタン(▼マーク)が表示されたことを確認してください。
ステップ2:テキストフィルターで特定の文字列を絞り込む
削除したい文字が含まれている列の見出しにある▼マークをクリックします。
表示されたメニューから「テキストフィルター」 > 「指定の値を含む...」を選択します。カスタムフィルターのダイアログが開きますので、入力欄に削除対象としたい文字列(例: 「キャンセル」や「未定」など)を入力し、「OK」をクリックします。
ステップ3:抽出された対象行を選択して削除する
条件に一致する行だけがシート上に抽出され、行番号が青色に変化している状態になります。
見出し行のすぐ下のデータ行(例: 2行目が抽出されているならその行)の行番号から、一番下の抽出データ行までの行全体をドラッグして全選択します。
選択した行番号の上で右クリックし、メニューから「行の削除」を選択します(ショートカットキー Ctrl + - (コントロールとマイナス)でも行削除できます)。
ステップ4:フィルターをクリアして確認する
行を削除すると画面が一時的に真っ白(見出しのみ)になりますが、焦る必要はありません。もう一度「データ」タブの「クリア」ボタンをクリックする(または Ctrl + Shift + L でフィルター自体をオフにする)と、条件に一致しなかった必要な行だけが綺麗に残ったデータ表に戻ります。
- 特別なプログラム(マクロ)やアドインのインストールが不要で、標準機能だけで完結すること
- 削除を実行する前に、どのデータが消去されるのかを目で見て事前に確認できるため安全性が高いこと
Excelの仕様上、オートフィルターで非表示になっている行は削除されませんが、稀に表の一部だけを手動で非表示にしている状態で削除すると、非表示データを巻き込んで削除してしまうトラブルが起きることがあります。
より安全を期すためには、ステップ3で行番号を選択した状態で、ショートカットキー Alt + ;(オルトとセミコロン) を押して「可視セル(画面に見えているセル)のみを選択」してから右クリックで削除を実行するのが、Excelプロの実務テクニックです。
【応用編】VBAマクロを使って特定の文字を含む行を高速で一括削除する
「毎日ダウンロードする注文履歴データから、特定の不要データをボタン一つで消し去りたい」というような業務には、VBAマクロによる自動クレンジングが圧倒的に効率的です。動作手順とコードを解説します。

特定の文字を含む行を削除するVBAサンプルコード
以下のマクロは、アクティブなシートのA列を上から下までスキャンし、指定したキーワード(例: 「テスト」)を含む行をすべて一括で削除します。
Sub DeleteRowsContainingText()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim targetText As String
Set ws = ActiveSheet
' ■ 削除したい条件文字列を指定します
targetText = "テスト"
' A列の最終行番号を取得
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' 画面更新と自動計算を一時停止して処理を高速化
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
' ★ 最終行から「上に向かって」逆順でループ処理を行います(ここが最重要!)
For i = lastRow To 2 Step -1
' セル内に targetText が含まれているか(部分一致)を判定
If InStr(ws.Cells(i, "A").Value, targetText) > 0 Then
ws.Rows(i).Delete
End If
Next i
' 設定を元に戻す
Application.Calculation = xlCalculationAutomatic
Application.ScreenUpdating = True
MsgBox "特定の文字を含む行の削除が完了しました!", vbInformation
End Sub
VBA行削除で「逆順ループ(Step -1)」を必ず使うべき理由
マクロで行削除を記述する際、初心者ほど For i = 2 To lastRow と上から下に向かって順番にループを書いてしまいがちです。しかし、実は上からのループで行削除を行うと、一部の行が削除されずに飛ばされてしまうバグが発生します。
例えば、3行目と4行目がどちらも削除対象だったとします。マクロが3行目を削除すると、下にあった4行目が自動的に繰り上がって「新しい3行目」になります。しかし、ループのカウンタ(i)は「次は4行目」と進んでしまうため、繰り上がってきたデータがスキャンされず、処理をすり抜けて残ってしまうのです。
これを防ぐために、行削除では必ず Step -1 を指定し、「表の一番下から上に向かって」逆方向にスキャンしていく設計にします。これが、行ズレによる処理漏れを防ぐための必須の鉄則です。
- ボタン登録やショートカット設定と組み合わせることで、完全に「ワンクリック自動化」が可能なこと
- 逆順ループ設計にすることで、どれだけ行数が多くても完璧なデータクレンジングが一瞬で実行されること
VBAのコード内で Application.ScreenUpdating = False という記述を入れて画面の描写更新を一時的に止めておくことは、マクロの実行速度を10倍以上に爆速化するための必須テクニックです。Excelが画面を描き直す余計なメモリ消費をなくすことで、フリーズを防ぎ、一瞬で仕事を完了させて定時退勤を勝ち取りましょう!
Excelの特定の文字を含む行削除に関するFAQ

Excelでの特定文字列を含む行の削除操作に関して、実務でよくある疑問やトラブルシューティングをQ&A形式でまとめました。
Q1:行削除マクロを実行した後、元に戻す(Ctrl + Z)ことはできますか?
いいえ、マクロ(VBA)によって実行された処理は、Excelの「元に戻す」ボタンやショートカットキー Ctrl + Z で取り消すことができません。
マクロを実行すると、シートの状態がメモリ上で直接書き換えられてしまうためです。万が一の誤操作に備えて、マクロを実行する前に必ずファイルを一度上書き保存しておくか、元データのバックアップシートを複製した上で処理を実行するように習慣づけましょう。
Q2:特定の文字が「含まれない」行を削除することはできますか?
はい、フィルター・VBAのいずれでも簡単に対応可能です。
オートフィルターを使う場合は、テキストフィルターの条件指定で「指定の値を含まない」を選択して絞り込み、同様に削除を行います。
VBAを使う場合は、条件判定の記述を InStr(...) = 0 に変更します(InStrの結果が0=含まれていない状態)。
If InStr(ws.Cells(i, "A").Value, targetText) = 0 Then
ws.Rows(i).Delete
End If
Q3:複数の異なる条件(例:「キャンセル」または「返品」)をOR条件で同時に削除できますか?
はい、フィルター機能の「カスタムフィルター」や、VBAの「Or演算子」を使用することで一括削除が可能です。
フィルターの場合は、抽出条件の設定で「または」にチェックを入れて2つ目の文字列を指定します。
VBAの場合は、条件分岐部分を以下のように Or で繋いで記述します。
If InStr(ws.Cells(i, "A").Value, "キャンセル") > 0 Or InStr(ws.Cells(i, "A").Value, "返品") > 0 Then
ws.Rows(i).Delete
End If
まとめ:特定の文字を含む行削除をマスターして業務効率化!
今回は、Excelで特定の文字を含む行を、フィルター機能を用いて手動で一括削除する手順と、VBAマクロを使って安全かつ高速に自動削除する応用手順を解説しました。ポイントをおさらいしておきましょう。
- 手動削除:
Ctrl + Shift + Lでフィルターを設定し、「指定の値を含む」で抽出して削除する - 可視セル選択:フィルター削除時は
Alt + ;(可視セル選択)を使って非表示行の巻き添え削除を防ぐ - VBA自動化:毎日使うクレンジング処理はマクロを組んでボタン一つで完了させる
- 鉄則:VBAで行を削除する際は、行番号がズレるのを防ぐために下から上へ逆順でループ処理(Step -1)を行う
- VBA高速化:処理中は
Application.ScreenUpdating = Falseを書いて描写更新を停止させる
文字列を含む行の削除処理を正しくマスターしておくだけで、システムからエクスポートした生のデータを手作業で整理する不毛な時間を一掃できます。ご自身の業務のデータ量や頻度に合わせて、最適なやり方を試してみてくださいね。
データ処理の時間を最小化して、余計な残業を撲滅し、今日もすっきり定時に退社しましょう!
Excelでの「Excelで特定の文字を含む行を一括削除する手順」のイライラを解消した後は、さらに業務効率をワンランク引き上げる「ExcelのVLOOKUP関数で#N/Aエラーが出る原因と解決手順」の基本操作や、「Excelで表を印刷範囲に収めて1ページで印刷する手順」の自動化テクニックも学んでみませんか? 関連記事もぜひチェックしてみてください。