VBAテクニック集 VBA一覧 オブジェクト操作 削除・クリア(Delete / Clear)

【VBA】条件に一致した行だけ削除する方法(If × Delete)|不要データを効率的に整理する実務テクニック

Excelでデータを扱っていると、「特定の条件に一致する行だけ削除したい」という場面が必ず訪れます。例えば、空白行だけを削除したい、エラーデータが含まれる行だけ消したい、特定の文字を含む行を削除したいなど、日常業務での“データクレンジング(データ整理)”では必須の作業です。

しかし、手作業で条件に一致する行を探して削除するのは手間がかかり、見落としも発生しがちです。また、データ量が多いほど作業時間が増え、Excelの動作が重くなる原因にもなります。

そこで役立つのが VBA(Visual Basic for Applications)による条件付き行削除の自動化 です。特に、If 文で条件を判定し、Delete メソッドで行を削除するという組み合わせは、Excel業務を大幅に効率化できる強力な方法です。

本記事では、条件に一致した行だけを削除する最も基本的な方法から、複数条件、文字検索、エラー判定、空白判定、実務で使われやすいパターン、注意点、RPAとの連携まで、豊富な例を交えて詳しく解説します。

目次

✅ If × Delete の基本|条件を満たす行だけ削除できる仕組み

・条件付き削除の基本構造

条件に一致した行だけ削除する処理は、次の 2 ステップで構成されています。

  1. If 文で条件を判定する
  2. 一致した行を Rows(i).Delete で削除する

もっとも基本となるコードは以下です。

If Cells(i, 1).Value = "削除" Then
    Rows(i).Delete
End If

このコードは、1列目(A列)の値が「削除」だった場合に、該当行を丸ごと削除します。


✅ 条件付き行削除の最重要ポイント|“下からループ” が必須

行を削除すると、削除した行より下の行が繰り上がります。そのため、上から順に処理するループ を書くと「次に確認すべき行」をスキップしてしまいます。

例:
5行目を削除 → 6行目が5行目に繰り上がる → 次のループで 7行目を確認 → 本来チェックすべき元6行目を無視してしまう

この問題を避けるため、常に“最終行 → 1行目” の逆順ループ が基本です。

For i = 最終行 To 1 Step -1
    '条件判定と削除
Next i

これが正しく行削除するための最重要ポイントです。


✅ 【基本】特定の値に一致する行だけ削除する

例:A列の値が「削除対象」の行を削除

・実務で最も基本となるコード

Dim i As Long
Dim lastRow As Long

lastRow = Cells(Rows.Count, 1).End(xlUp).Row

For i = lastRow To 1 Step -1
    If Cells(i, 1).Value = "削除対象" Then
        Rows(i).Delete
    End If
Next i

・コードの動き

  1. 最終行を取得
  2. 下から上へループ
  3. 条件に一致した行を削除

これは条件付き削除の最も基本的な形です。


✅ 空白行を削除する方法|CountAを使うパターン

空白行削除は実務で最も多いニーズです。

・行全体が空白の場合に削除する

If WorksheetFunction.CountA(Rows(i)) = 0 Then
    Rows(i).Delete
End If

CountA は「空でないセルの数」を返すため、0なら行全体が空です。

・特定列が空白の場合

If Cells(i, 2).Value = "" Then
    Rows(i).Delete
End If

空白判定はデータ整理で毎日のように使います。

参考:【VBA】For文:空白行まで繰り返す処理方法




✅ 特定の文字を含む行を削除する(InStr)

部分一致で削除したい場合に使います。

・例:“エラー” という文字を含む行を削除

If InStr(Cells(i, 3).Value, "エラー") > 0 Then
    Rows(i).Delete
End If

・InStr の意味

  • 文字が見つかった位置を返す
  • 見つからない場合は 0

部分一致検索のため、柔軟性が高いのが特徴です。

参考:【VBA】検索してセル位置を取得する方法|Find・InStr・ループを徹底活用


✅ 数値判定で削除する(IsNumeric)

「数値ではない行を消す」「数値のみ残す」という処理に便利です。

・例:数値ではない行を削除

If IsNumeric(Cells(i, 1).Value) = False Then
    Rows(i).Delete
End If

実務では、レポートに余計な文字列が混ざっているデータなどで多用されます。

参考:【VBA】IsNumeric関数:値が数値か確認する方法


✅ エラー行だけ削除する(IsError/WorksheetFunction.IsError)

エラー値(#N/A、#DIV/0! など)が含まれる行だけ削除する例です。

If WorksheetFunction.IsError(Cells(i, 5)) Then
    Rows(i).Delete
End If

エラー行があると後続処理が失敗しやすいため、実務では多用されます。

参考:【VBA】「#N/A以外」をフィルターする方法|エラー値を除外して正確に抽出するテクニック


✅ 複数条件の組み合わせ削除(AND/OR)

・A列が空白 かつ B列が0 の行だけ削除

If Cells(i, 1).Value = "" And Cells(i, 2).Value = 0 Then
    Rows(i).Delete
End If

・A列が空白 または C列が“無効” の行を削除

If Cells(i, 1).Value = "" Or Cells(i, 3).Value = "無効" Then
    Rows(i).Delete
End If

複雑なデータクレンジングで役立つ方法です。


✅ 条件付きで複数列をまとめて判定する方法

行ごとに複数項目をチェックして削除する例です。

例:A列とC列のどちらも空白なら削除

If Cells(i, 1).Value = "" And Cells(i, 3).Value = "" Then
    Rows(i).Delete
End If

複数列チェックは実務で非常に多いため、覚えておくと便利です。


✅ 選択範囲の行だけ削除する方法

ユーザーが選択した範囲の中で、条件に一致する行だけ削除する方法です。

Dim r As Range
For Each r In Selection.Rows
    If WorksheetFunction.CountA(r) = 0 Then
        r.Delete
    End If
Next r

CountA を使って「その行が空かどうか」を判定します。


❗ 条件付き削除で起こりやすいトラブルと防ぐコツ

・① 上からループしてしまう

削除に伴う行番号ズレが発生し、削除漏れが起こります。

→ 下から上へループするのが鉄則


・② 数式セルを削除すると参照が崩れる

行削除は構造が変わるため、数式の参照がズレることがあります。

→ 必要に応じて絶対参照($)を使用


・③ シート保護で削除できない

保護されたシートでは削除がエラーになります。

→ Unprotect が必要


・④ 結合セルによるレイアウト崩れ

結合セルがある表で削除すると不整合が起きます。

→ 事前に結合を解除しておく


・⑤ 大量データの削除は処理が重い

高速化対策が必要。

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
'削除
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic

❗ Delete と Clear の違いを理解して安全に使い分ける

メソッド書式行構造
Rows.Delete消える消える行自体が詰まる
Clear消える消える行は残る
ClearContents消える残る行は残る

Delete を使うべき場面

  • 不要行を完全に排除したい
  • 後続処理で表の構造を整えたい
  • 行番号の綺麗な一覧にしたい

Clear/ClearContents を使う場面

  • 行の構造を変えたくない
  • 値だけ消したい
  • レイアウトを維持したい

✅ 実務で役立つ応用テクニック|条件を柔軟に組み合わせる

・正規表現で判定する(VBA標準で扱える例)

「数字だけ残す」など高度な条件に対応できます。

・複数の条件セットを配列にして可読性アップ

例:削除対象語句一覧を Array で管理

Dim delWords As Variant
delWords = Array("削除", "無効", "対象外")

・データベース的な行削除も可能

顧客IDが一致しない行を削除する処理など、
実務で大規模データに応用できます。


✅ RPA(UiPath)との組み合わせで行削除の価値がさらに高まる

RPAは Excel の細かい行削除が苦手で、

  • 行を1つずつ削除すると処理が遅くなる
  • 大量行削除で固まる
  • 空白や不要行があると後続処理がエラーになる

といった問題が発生します。

そこで RPA前にVBAで全て削除を済ませておく と、

  • RPAが高速化
  • 表の構造が安定
  • フローが停止しにくくなる

という大きなメリットがあります。

Excel業務の自動化では、VBAとRPAは組み合わせることで強力な効果を発揮します。


❗ 条件付き削除の実務チェックリスト(Excel業務で必須)

  • 最終行から1行目への逆ループが鉄則
  • 判定列を明確にする(どの列で判断するか)
  • 結合セルは事前に解除
  • シート保護の有無を確認
  • 数式セルの削除に注意
  • 大量データは高速化設定を併用
  • 削除後の行数の整合性を確認

✅ まとめ:If × Delete を使いこなせばデータ整理が劇的に効率化する

If 文で条件を判定し、Delete メソッドで行を削除する方法は、
Excel業務で最も出番が多い“データ整理の自動化テクニック”です。

  • 条件判定は If 文で柔軟に設定可能
  • Delete は行を丸ごと削除する強力な操作
  • 空白行削除・部分一致・数値判定・エラー判定など実務向け応用多数
  • 必ず下からループすることが重要
  • 結合セル・保護シートなどの注意点を押さえる
  • RPA前の整理に使うと業務全体が安定する

条件付き行削除をマスターすれば、
Excel作業の手間を大幅に減らし、業務効率化に直結します。
ぜひ本記事を参考に、実務で活用してみてください。

    -VBAテクニック集, VBA一覧, オブジェクト操作, 削除・クリア(Delete / Clear)