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

【VBA】不要データを一括削除する方法|空欄行・エラー行・重複行をまとめて整理

Excelで大量のデータを扱っていると、空欄行、エラー行、重複行など、分析や集計の妨げになる“不要データ”が必ず混ざります。手作業で一つひとつ削除していては時間がかかり、見落としや誤削除も起きやすく、業務効率の低下につながります。

そこで役立つのが VBAによる不要データの一括削除 です。条件に応じて行を一括削除する処理をVBAで自動化することで、データ前処理の作業時間を大幅に削減でき、ミスも防止できます。また、空欄行・エラー行・重複行など複数種類の不要データを“まとめて整理”できるため、後続の集計やレポート作成がスムーズになります。

本記事では、実務で頻繁に使用される不要データの種類ごとに、最適な削除方法一括削除の統合処理 を詳しく解説します。さらに、注意点やRPAとの連携など、現場で役立つノウハウも丁寧にまとめました。

目次

✅ 不要データを一括削除するメリット|前処理の品質が作業全体を左右する

・Excelは“前処理が9割”と言われる理由

Excelで分析・集計を行う前には、必ず入力されたデータを整える前処理が必要です。

  • 空欄行があるとフィルターがずれる
  • エラー値があると計算が止まる
  • 重複があると合計値がおかしくなる
  • 不要行があると後続のRPAが失敗する

特に大量データでは、手作業では整理しきれず、誤りも発生しやすくなります。

・VBAを使えば一括削除が可能

VBAを使うと、

  • 空欄行
  • エラー行
  • 重複行

などの不要データを 条件付きで自動削除 できます。

さらに、これらを「1つのプロシージャ」でまとめて実行することも可能で、表全体の整形が一瞬で完了します。


✅ 空欄行を削除する方法|CountA を使った確実な判定

・行全体が空欄かどうかを判断する

空欄行を削除するには、行内に“値が1つもない”ことを判定します。

・基本コード

Dim i As Long
Dim lastRow As Long

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

For i = lastRow To 1 Step -1
    If WorksheetFunction.CountA(Rows(i)) = 0 Then
        Rows(i).Delete
    End If
Next i

・ポイント

  • CountA が 0 → その行は完全に空
  • 上からではなく 下からループ が鉄則
  • 空欄行が散在していてもまとめて削除できる

空欄行削除はデータ整形で最も使われる処理のひとつです。


✅ エラー行を削除する方法|WorksheetFunction.IsError で判定

Excelでは数式の結果がエラーになる場合があります。

例:

  • #DIV/0!
  • #N/A
  • #VALUE!

これらが含まれている行だけ削除したい場合は次の方法が使えます。

・基本コード

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

・ポイント

  • 数式セルでも正しく判定できる
  • エラー行は後続の関数や集計の妨げになる
  • RPAの読み込み時に失敗することも多い

そのため、Excelの事前処理として非常に重要な削除項目です。


✅ 重複行を削除する方法|Dictionary を使った実務向け手法

重複行の削除は、最も複雑な不要データ削除のひとつです。
Excelの「重複の削除」機能もありますが、VBAではもっと柔軟に制御できます。

・キーとなる値を Dictionary に登録し、重複を判定

Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

Dim key As String

For i = lastRow To 2 Step -1
    key = Cells(i, 1).Value & "|" & Cells(i, 2).Value
    
    If dict.Exists(key) Then
        Rows(i).Delete
    Else
        dict.Add key, True
    End If
Next i

・ポイント

  • 複数列の組み合わせで重複判定ができる
  • Dict.Exists を使うことで高速処理が可能
  • 必要に応じてキー項目を柔軟に変更可能

重複行削除はデータベース管理やレポート集計で必須です。

参考:【VBA】オートフィルタで抽出した一部データをコピーする方法|必要な情報だけを効率的に転記する




✅【統合版】空欄行・エラー行・重複行をまとめて一括削除する

最も実務で価値が高いのが、複数の不要データ対策をまとめて実行する“統合削除” です。

以下は、空欄行 → エラー行 → 重複行の順で削除するプロシージャです。


・統合削除の実務向けコード(例)

Sub CleanUpData()

    Dim i As Long
    Dim lastRow As Long
    Dim dict As Object
    Set dict = CreateObject("Scripting.Dictionary")
    
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    '-----------------------
    ' ① 空欄行の削除
    '-----------------------
    For i = lastRow To 1 Step -1
        If WorksheetFunction.CountA(Rows(i)) = 0 Then
            Rows(i).Delete
        End If
    Next i

    ' 再度最終行を取り直し
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row

    '-----------------------
    ' ② エラー行の削除
    '-----------------------
    For i = lastRow To 1 Step -1
        If WorksheetFunction.IsError(Cells(i, 1)) Then
            Rows(i).Delete
        End If
    Next i

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

    '-----------------------
    ' ③ 重複行の削除
    '-----------------------
    Dim key As String

    For i = lastRow To 2 Step -1
        key = Cells(i, 1).Value & "|" & Cells(i, 2).Value
        
        If dict.Exists(key) Then
            Rows(i).Delete
        Else
            dict.Add key, True
        End If
    Next i

End Sub

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

✅ 統合削除を実務で使うメリット

・前処理の時間が大幅に短縮される

これまでは、

  1. 空欄行削除
  2. エラー行削除
  3. 重複行削除

と手順が分かれていたものが、1クリックで完了します。

・後続の集計が安定する

不要データが混ざったままだと Excel の計算や Power Query が不安定になります。

・レポート化やデータ分析がスムーズ

均一で綺麗なデータが手に入ることで、分析の精度と速度が上がります。


❗ 統合削除で起こりやすいトラブルと対処法

・① 結合セルがあると正しく削除できない

結合セルは行削除に弱いため、事前解除が必要。

・② シートが保護されていると削除できない

Unprotect が必要です。

・③ 大量データだと処理が重い

高速化設定を併用します。

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

・④ 重複判定項目は業務に応じて変更が必要

1つの列だけで判定すると誤削除の可能性があります。


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

メソッド書式行構造
Rows.Delete削除される削除される行自体が詰まる
Clear削除される削除される行は残る
ClearContents削除される残る行は残る

「行(構造)ごと消したい“完全削除”」 → Delete
「値だけ消したい」 → ClearContents

不要データ整理は Delete が基本になります。


✅ 実務レベルで使える応用テクニック

・不要行のパターンを“外部ファイル”で一覧管理

CSVや設定シートで管理すると可読性が向上します。

・複数列の重複削除を柔軟に切り替える

業務ごとにキー項目を変更するだけで流用可能。

・ログを記録して誤削除を防止

削除した行番号を記録する方法もあります。


✅ RPA前のデータ前処理として最適|UiPathとの連携メリット

RPA(特にUiPath)は、次のような場合にエラーになりやすいです。

  • 空欄行が途中にある
  • エラー値が含まれている
  • 重複行で処理対象が増える
  • 不規則な表になっている

そのため、RPA処理の前にVBAで不要データを一括削除すると、

  • フローが安定
  • 実行速度が向上
  • 例外発生が減る
  • Excelの読み取り精度が向上

RPA × VBA の組み合わせは非常に効果的です。


❗ 一括削除の実務チェックリスト

  • 最終行から逆ループが鉄則
  • CountAで空欄行を確実に判定
  • IsError でエラー行を検出
  • 重複行は Dictionary を活用
  • シート保護を確認
  • 結合セルは事前解除
  • 大量データは高速化設定
  • 削除後に整合性チェック

✅ まとめ:空欄行・エラー行・重複行をまとめて整理すればデータ品質が大幅に向上する

Excelのデータ前処理は、業務全体の効率と精度を左右する重要な工程です。
VBAを使えば、空欄行、エラー行、重複行といった不要データを 自動で一括削除 でき、手作業では追いつかない量のデータを瞬時に整理できます。

  • 空欄行削除 → CountAで確実に判定
  • エラー行削除 → IsErrorで安全に削除
  • 重複行削除 → Dictionaryで高速判定
  • 3種の削除を統合すれば前処理が一瞬で完了
  • 後続処理(集計・分析・RPA)が劇的に安定

不要データが整理された“整った表”は、分析精度や業務のスピードを確実に向上させます。本記事を参考に、ぜひ実務で活用してみてください。

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