【Excel VBA】RemoveDuplicatesで重複データを削除する方法|複数列を条件にする方法も解説
みなさんこんにちは。
Excelで商品一覧や顧客データを整理していると、同じデータが複数行に登録されていて困った経験をしたことがある方も多いかと思います。
今回は、Excel VBAのRemoveDuplicatesを使って重複行を削除する方法について、単一列・複数列の指定を例にご紹介したいと思います。
今回使用するExcelデータ
Sheet1のA1~C7に、次のデータを入力してください。1行目は見出しとなります。
| 商品コード | 商品名 | 担当者 |
|---|---|---|
| A001 | りんご | 田中 |
| A002 | みかん | 佐藤 |
| A001 | りんご | 鈴木 |
| A003 | ぶどう | 田中 |
| A002 | みかん | 佐藤 |
| A001 | りんご | 田中 |

1列だけを条件に重複行を削除する
VBAエディター(Alt + F11)で標準モジュールを追加し、次のコードを入力してください。Columns:=Array(1)で、対象範囲の1列目(A列)を重複判定に使用します。
Option Explicit
Sub RemoveDuplicateByCode()
Dim ws As Worksheet
Dim lastRow As Long
' 重複削除の対象シートと最終行を取得する
Set ws = ThisWorkbook.Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
If lastRow < 2 Then Exit Sub
' A列だけで判定し、B・C列も行単位で整理する
ws.Range("A1:C" & lastRow).RemoveDuplicates _
Columns:=Array(1), Header:=xlYes
End Sub
実行すると、同じ商品コードのうち先に登場した行だけが残ります。今回のデータでは、A001・A002・A003の3件となります。B列・C列も同じ行に合わせて整理されます。
複数列を条件に重複行を削除する
今度は商品コードと担当者の組み合わせで判定してみましょう。先ほどの処理でデータが減っている場合は、最初のA1~C7を入力し直してから実行してください。
Sub RemoveDuplicateByCodeAndStaff()
Dim ws As Worksheet
Dim lastRow As Long
' A列からデータの最終行を取得する
Set ws = ThisWorkbook.Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
If lastRow < 2 Then Exit Sub
' A列の商品コードとC列の担当者が両方一致する行を削除
ws.Range("A1:C" & lastRow).RemoveDuplicates _
Columns:=Array(1, 3), Header:=xlYes
End Sub
Columns:=Array(1, 3)は、対象範囲の1列目と3列目を使う指定です。シート全体の列番号ではなく、指定した範囲の左端を1として数える点に注意してください。

実行結果とHeaderの指定
複数列のコードを実行すると、商品コードと担当者が両方一致する2行が削除され、見出しを除いて4件が残ります。「A001・田中」と「A001・鈴木」は担当者が違うので両方残ります。

Header:=xlYesは、範囲の先頭行を見出しとして扱う指定です。見出しがないデータではxlNoを使用してください。省略時の既定値はxlNoなので、明示することをおすすめします。
元データが変更される点に注意
RemoveDuplicatesは指定範囲のデータを直接変更します。マクロ実行後は通常の「元に戻す」で復元できないため、実行前にブックやシートをコピーしておいてください。
また、判定列だけでなく関連する列も含めて範囲を指定してください。例えばA列だけにRemoveDuplicatesを実行すると、隣の列とデータの対応関係が崩れるおそれがあります。
最後に
いかがでしたでしょうか。今回は、RemoveDuplicatesで1列・複数列を条件に重複データを削除する方法をご紹介しました。ColumnsとHeaderの指定、実行前のバックアップを意識して活用してください。少しでも参考になれば幸いです。
開発依頼について
ココナラでWebスクレイピング開発サービスを出品しております。
自分で開発をしようと思ったけど、VBAでのネット記事が少なく困っている方も多いかと思います。
そんな方はいつでもお気軽にご相談ください。
また、本ブログからご依頼いただいた方については割引特典がございますので、
ご不明点と合わせてメッセージをいただけると幸いです。
業務の流れをまるごと自動化します Excel・Web・Teams・SaaSで業務全体を自動化Webスクレイピング以外にもWebアプリの開発サービスも出品しております。
こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、
お気軽にご相談ください。
スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?
