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

【VBA】行を削除する方法|Rows.Deleteで空白行をまとめて処理

Excelで大量のデータを扱っていると、空白行が混ざって作業がしづらくなったり、分析や集計が正しくできなくなったりすることがあります。とくに、取り込んだCSVデータや自動出力されたレポートなどでは、空白行がランダムに挿入されていたり、不要な行が残っていることも珍しくありません。こうした不要行を手作業で1つずつ削除していては、時間がいくらあっても足りません。また、操作ミスによる削除事故も起こりやすく、後続の集計やRPA処理に悪影響を与えてしまう場合もあります。

VBAの Rows.Delete を活用すると、空白行をまとめて削除したり、条件に一致する行だけを効率よく消したりでき、Excelのデータ処理が劇的にスムーズになります。この記事では、行削除の基本から応用、実務で多い「空白行の一括削除」、条件付き削除、トラブルを防ぐポイントまで徹底的に解説します。

✅ Rows.Deleteとは|行をまるごと削除できる基本メソッド

・Rows.Deleteの役割

Rows.Delete は、Excelの特定の行、または行範囲を 丸ごと削除するためのVBAメソッド です。

Rows(5).Delete

これは5行目全体を削除し、下の行が詰められます。
行が削除されるため、セル位置や数式参照も変わります。

・行番号で指定する仕組み

Rows(n) という形式で、削除したい行を指定します。

  • Rows(1) → 1行目
  • Rows(10) → 10行目
  • Rows("5:8") → 5~8行目

Excelの「行全体を削除」をコードとして実行できるのがRows.Deleteです。


✅ 基本的な行削除の書き方|1行・複数行

・1行だけ削除する

Rows(5).Delete

簡潔ですが非常に強力な処理です。

・複数行まとめて削除する

Rows("5:10").Delete

範囲を指定するだけで一度に削除できます。

・選択範囲を削除する方法

選択している行を削除する場合は以下のように書けます。

Selection.EntireRow.Delete

ただし、Selection は誤操作を招きやすいため、
基本は行番号で指定するほうが安全 です。


✅ 空白行を削除する方法|実務で最も多いニーズ

行削除で最も使われるのが「空白行の削除」です。
例えば:

  • データに数百行の空白が含まれている
  • ランダムに空白行が挿入されている
  • 他のシステムから出力されたレポートに空白行が大量にある

こうした場面では、VBAで一括削除すると仕事の効率が大きく向上します。


✅ 空白行の削除コード(基本)|A列が空欄の行を削除

・空白行削除の代表的なコード

Dim i As Long
For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Cells(i, 1).Value = "" Then
        Rows(i).Delete
    End If
Next i

・コードの動きを解説

  1. 最終行を取得
  2. 最終行から1行目へ向かってループ
  3. A列のセルが空の場合に行を削除

・なぜ「下から上へ」ループするのか?

上から削除すると、行番号が変わり、次にチェックすべき行がスキップされるからです。

NG例(上から削除)
5行目削除 → 6行目が5行目に変わり、チェック漏れが発生

OK例(下から削除)
下から順番に削除 → 行番号のズレが起きない

実務ではこれが非常に重要です。

参考:【VBA】フィルタを使って空白行を削除する方法|効率的にデータを整理しよう




✅ 応用①:任意の列が空白なら行削除

例えば「B列が空欄なら行削除」という処理は次のように書けます。

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

複数列を判定したいときは AND を使います。

If Cells(i, 2) = "" And Cells(i, 5) = "" Then

✅ 応用②:「データ行だけ残す」削除パターン

空白行を消すのではなく、
「データがある行だけ残したい」というケースも多いです。

例:A列に数字がある行だけ残す

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

不要行を消すと、後続の集計が非常に安定します。


✅ 応用③:「特定の文字を含む行」を削除する

InStr関数を使って、行内の文字を判定できます。

例:「削除」という文字を含む行を削除

If InStr(Cells(i, 3).Value, "削除") > 0 Then
    Rows(i).Delete
End If

参考:【VBA】特定の文字から特定の文字までを抽出する方法

✅ 応用④:選択した範囲の空白行を一括削除

ユーザーが選択した部分だけ削除したい場合はこちら。

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

CountA を使うと「その行に値が1つもない」ことを確認できます。


✅ 行削除で起こりやすいトラブルと対策

・① 行削除後に参照式がズレる

行削除は構造を変えるため、数式が意図せず変化することがあります。

対策:事前に参照範囲を固定($ を付ける)

・② シート保護中だと削除できない

Deleteを実行しようとするとエラーが出ます。

対策:削除前に保護を解除する

・③ 結合セルがあると削除方向がおかしくなる

結合セルがある行で削除を行うと、想定外の動きをします。

対策:結合を解除してから処理

・④ 大量削除は処理が重くなる

行削除は構造が変わるため、処理コストが高いです。
高速化するには以下が有効です。

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

✅ 大量データの行削除はVBAが必須|実務例

大量の CSV やシステム出力データでは、
空白行やエラー行が1000件単位で含まれていることがあります。

手作業での削除は現実的ではありません。

VBAのRows.Deleteと逆ループ処理を組み合わせると:

  • 空白行を一括で削除
  • 不要行を整理して表を安定化
  • 集計や分析の前処理が早く終わる

といったメリットがあります。


✅ RPA(UiPath)との組み合わせで業務効率がさらに向上

RPAツール(UiPathなど)は、Excelの行削除が苦手です。
1行ずつ削除しようとすると処理落ちしたり応答なしになりがちです。

そこで有効なのが RPA前にVBAで行削除済みの表を作っておくこと

RPA × VBAの相性がよい理由

  • RPAは行削除が遅い
  • VBAは行削除が高速
  • RPAは整った表を扱うと安定する

業務フローの安定性が飛躍的に高まります。


❗ 安全に行削除するためのチェックリスト

削除処理はミスするとデータが取り返しのつかない状態になります。
実務では以下をチェックしましょう。

  • 削除前に必ずバックアップ
  • 行番号のズレを防ぐため逆ループで処理
  • シート保護の有無を確認
  • 結合セルがある場合は解除
  • 数式セルの削除は慎重に
  • 大量データは高速化設定を併用
  • 削除後の総行数を再確認

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

行削除(Delete)は構造を変えますが、Clearは内容だけを消します。

操作書式行構造
Rows.Delete消える消える行自体が詰まる
Clear消える消える行は残る

業務上、
「行を消したいのか」「値だけ消したいのか」
ここを誤ると表の構造が壊れます。


❗ 条件付き行削除のよくある実務パターン(まとめ)

  • 空白行削除
  • 指定文字を含む行削除
  • 数値以外の行だけ削除
  • エラー値の行を削除(IsError)
  • 選択範囲の空白行だけ削除

どれもRows.Deleteを応用することで実現できます。


✅ まとめ:Rows.Deleteを使いこなして不要行を安全に整理しよう

行削除はExcel VBAの中でも使用頻度が非常に高い操作です。
Rows.Deleteを理解することで、空白行の整理や条件付き行削除が効率的に行えるようになります。

  • Rows.Deleteで行全体を削除できる
  • 空白行削除は逆ループで安全に処理
  • 条件付き削除で複雑なデータ整理にも対応
  • 結合セル・参照式・シート保護には注意
  • 大量データには高速化設定が有効
  • RPA前に行削除をしておくと業務全体が安定

行削除を正しく自動化できると、Excel作業が大幅に効率化し、
後続処理やRPAとの連携も格段にスムーズになります。
ぜひ本記事を参考に、Rows.Deleteを実務レベルで使いこなしてみてください。

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