VBAで自動化 VBA一覧 配列・データ操作 重複処理

【VBA】RemoveDuplicatesの使い方|複数列の重複削除を自動化する実務向け

Excelのデータ整理で非常によく使われる機能が「重複の削除」です。しかし、手作業では複数列を選ぶ必要があり、データ範囲を毎回指定したり、項目を誤ってクリックすると重大な削除ミスにもつながります。毎月の売上集計、顧客リストの重複除去、在庫データの整理など、同じ操作を何度も繰り返す場面では、手動操作よりも VBAによる完全自動化 の方が圧倒的に安全で効率的です。

Excel VBA には、標準機能「重複の削除」をマクロから呼び出せる
RemoveDuplicates という強力なメソッドが用意されています。
複数列の重複削除にも対応しているため、実務で使う場面も非常に多く、覚えておくとデータ加工の幅が大きく広がります。

この記事では、RemoveDuplicates の基本から複数列処理、注意点、よくあるエラー、実務での応用、ChatGPT や RPA との連携まで、現場で役立つ視点で詳しく解説します。

目次

✅ RemoveDuplicatesとは?VBAで重複削除を自動化するための基本メソッド

・RemoveDuplicates の役割

RemoveDuplicates は、Excelの「データ → 重複の削除」機能をVBAで呼び出すメソッドで、

  • 指定した範囲
  • 選択した列を基準に

重複行を自動で削除してくれる便利な機能です。

例:

Range("A1:C100").RemoveDuplicates Columns:=Array(1,2), Header:=xlYes

このコードは、A列とB列を基準に重複削除を行います。


・RemoveDuplicates の強み

  • Excel標準機能と同じ処理のため信頼性が高い
  • 複数列の重複判定に対応
  • 手動作業よりミスが少ない
  • 大量データでも比較的高速
  • シンプルなコードで実装できる

RemoveDuplicates は、データ整形の自動化において非常に実用的です。


✅ RemoveDuplicates の基本構文と仕組み

・基本構文はこちら

Range("範囲").RemoveDuplicates Columns:=配列, Header:=xlYes または xlNo

Columns

重複判定に使用する列番号を配列で指定します。
(A列=1、B列=2、C列=3…)

Header

先頭行が見出しかどうかを指定します。

  • 見出しあり:xlYes
  • 見出しなし:xlNo

・1列だけ重複削除したい場合

Range("A1").CurrentRegion.RemoveDuplicates Columns:=1, Header:=xlYes

・複数列で重複削除する場合

Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(1,3), Header:=xlYes

※ A列とC列の値が両方一致した行だけが重複と判定されます。

参考:【VBA】複数列の重複削除する方法|セル単位・行単位で処理する実務向けテクニック


✅ RemoveDuplicates の実務向けサンプル集

ここからは現場で使える具体的なコードを紹介します。


✅ サンプル①:表全体を対象に1列だけ重複削除する

・最も基本的なRemoveDuplicatesの使い方です。

Sub RemoveDuplicates_OneColumn()

    Dim rg As Range
    Set rg = Range("A1").CurrentRegion

    rg.RemoveDuplicates Columns:=1, Header:=xlYes

End Sub

・手順と解説

  1. CurrentRegionで表全体を取得
  2. 1列目(A列)を基準に重複削除
  3. 見出し行があるため xlYes
    参考:【VBA】シート全体のスペースを削除する方法:Trim 関数・Replace 関数



✅ サンプル②:複数列(A列+C列)を基準に重複削除する

Sub RemoveDuplicates_MultiColumns()

    Dim rg As Range
    Set rg = Range("A1").CurrentRegion

    rg.RemoveDuplicates Columns:=Array(1, 3), Header:=xlYes

End Sub

・実務で非常に使用頻度が高い

  • 顧客コード+商品コード
  • 日付+担当者
  • 商品コード+サイズ

など複数列での重複判定はExcelでは手作業でミスが多く、VBAで自動化するメリットが大きい処理です。


❗ RemoveDuplicates が誤動作しやすいケース

RemoveDuplicates は便利な反面、次のようなケースでは注意が必要です。

・注意点①:結合セルがあると正しく判定できない

結合セルが範囲内にあると、期待した動作にならないことがあります。
→ 必ず結合セルの解除を推奨。


・注意点②:数値と文字列の混在で別データと判定される

例:

  • "00123" と 123 は別データとして扱われる
    → 「テキストとして保存」や「書式の統一」が必要。

・注意点③:見出し行の扱いに注意

Header の指定が誤っていると見出し行まで削除されてしまう危険があります。


・注意点④:計算式のあるセルは値が異なると判定される

同じように見えても計算式の値が異なれば重複とはみなされません。


✅ RemoveDuplicates を安全に使うための事前チェック

RemoveDuplicates でデータ整理を実行する前に、以下を確認すると安全です。

  1. 結合セルはないか
  2. 見出し行の行数が正しいか
  3. 値が「数値」か「文字列」か
  4. 項目ごとに余計な空白がないか
  5. 削除前のバックアップは取ったか

実務では、削除操作に伴うリスクがあるため バックアップシートを自動生成するコード を合わせて使用することも多いです。


✅ サンプル③:RemoveDuplicates 前後でバックアップを自動生成する

Sub RemoveDuplicates_WithBackup()

    Dim ws As Worksheet
    Dim wsBackup As Worksheet

    Set ws = ActiveSheet

    ' バックアップ作成
    ws.Copy After:=ws
    Set wsBackup = ActiveSheet
    wsBackup.Name = ws.Name & "_Backup"

    ' 重複削除を実行
    ws.Range("A1").CurrentRegion.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes

End Sub

・実務では非常に使われる安全対策

誤って削除しすぎてしまった場合でも元データが残るため安心です。


✅ サンプル④:RemoveDuplicates の対象列を柔軟に変えたい場合

複数列判定の列番号を配列で動的に指定できます。

Sub RemoveDuplicates_Flexible()

    Dim rg As Range
    Dim cols As Variant

    Set rg = Range("A1").CurrentRegion

    ' 使用する列番号(例:A, C, E列)
    cols = Array(1, 3, 5)

    rg.RemoveDuplicates Columns:=cols, Header:=xlYes

End Sub

❗ RemoveDuplicates と Dictionary の違い(よくある質問)

「RemoveDuplicates があれば Dictionary は不要?」
という質問は非常に多いですが、目的が異なります。

目的RemoveDuplicatesDictionary
重複削除
重複抽出×(できない)
最新行だけ残す
柔軟な判定
データ件数が多い◎(高速)

RemoveDuplicates は「削除専用」。
抽出や複雑な条件判定は Dictionary が最適です。


❗ RemoveDuplicates の内部処理の仕組み(理解すると応用が効く)

RemoveDuplicates は内部で以下を行っています。

  1. 指定列の複数列からキーを生成
  2. 最初の登場行を残し、それ以降は削除
  3. 行の削除に伴う行番号調整

ただし、Excelの「表計算エンジン」の中で処理しているため、
Dictionaryのように細かいロジックを制御することはできません。


✅ RemoveDuplicates を高速化するための設定

重い処理をするときは次の設定を組み合わせると高速です。

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

' 重複削除の処理(RemoveDuplicates)

Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

❗ RemoveDuplicates が遅い場合の原因

  • データが数十万件以上
  • 結合セルが混在
  • 計算式が多い
  • テーブル(ListObject)でない場合
  • 自己参照のある式

場合によっては Dictionary の方が高速です。


✅ RPA(UiPath / PAD)との連携でRemoveDuplicatesがよく使われる理由

・RPAでExcelの重複削除をするのは遅い

→ VBAで事前に重複処理を済ませると、RPAが安定する。

・レコードの重複チェックは多くの業務で必須

  • 売上データ
  • 顧客名簿
  • システム移行データ
  • 出荷・受注データ

VBAで整形 → RPAでアップロード
という構成は実務で非常に強い。


❗ ChatGPT との併用で RemoveDuplicates コードはさらに強力になる

ChatGPT に以下を指定すれば、RemoveDuplicates のコード生成が一瞬です。

  • 使用する列番号
  • データ範囲
  • 見出しの有無
  • バックアップの必要性

ただし、生成コードには次の改善が必要になることがあります。

  • Range の指定が曖昧
  • 列番号の固定化(柔軟性不足)
  • エラーハンドリング不足

この記事の内容を理解していれば、ChatGPT に依存せずコードをレビューできます。


❗ RemoveDuplicates を使う際の注意点まとめ

  • 削除は元に戻せないためバックアップ推奨
  • 結合セルがあると不正動作
  • 見出しの扱いは慎重に
  • 計算式は値に変換しておくと安全

Q&A|よくある質問

Q:重複削除後に空白行が残るのですが?

→ RemoveDuplicates は空白行削除機能はありません。
別途行削除処理を追加します。

Q:列が毎月変わる場合でも対応できますか?

→ 動的列指定(Array)で可能です。

Q:テーブル(ListObject)にも使えますか?

→ 使えます。ListObject.Range.RemoveDuplicates で呼び出せます。


✅ まとめ:RemoveDuplicatesは簡単・安全・強力な重複削除自動化の武器

最後にこの記事のポイントを整理します。

  • RemoveDuplicates はExcel標準機能のVBA版
  • 複数列の重複削除に対応
  • Dictionaryより簡単で手軽
  • 結合セルや見出し行の扱いに注意
  • バックアップ作成と組み合わせると実務で強力
  • RPA/ChatGPT と併用すると業務自動化がさらに加速
  • データ整形の中心機能として覚える価値が大きい

RemoveDuplicates を正しく使いこなせば、Excelの大量データ処理が格段に効率化され、毎月の定型業務を数分単位で短縮できます。ぜひこの記事を参考に、あなたの業務でも活用してみてください。

    -VBAで自動化, VBA一覧, 配列・データ操作, 重複処理