【Excel VBA】RemoveDuplicatesで重複データを削除する方法|複数列を条件にする方法も解説

みなさんこんにちは。

Excelで商品一覧や顧客データを整理していると、同じデータが複数行に登録されていて困った経験をしたことがある方も多いかと思います。

今回は、Excel VBAのRemoveDuplicatesを使って重複行を削除する方法について、単一列・複数列の指定を例にご紹介したいと思います。

今回使用するExcelデータ

Sheet1のA1~C7に、次のデータを入力してください。1行目は見出しとなります。

商品コード商品名担当者
A001りんご田中
A002みかん佐藤
A001りんご鈴木
A003ぶどう田中
A002みかん佐藤
A001りんご田中
Excel VBAのRemoveDuplicatesで重複削除する前の商品コード・商品名・担当者のサンプルデータ

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として数える点に注意してください。

Excel VBAのRemoveDuplicatesで単一列と複数列を条件に重複データを削除するコード

実行結果とHeaderの指定

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

Excel VBAのRemoveDuplicatesで商品コードと担当者の複数列を条件に重複削除し4件のデータが残った画面

Header:=xlYesは、範囲の先頭行を見出しとして扱う指定です。見出しがないデータではxlNoを使用してください。省略時の既定値はxlNoなので、明示することをおすすめします。

元データが変更される点に注意

RemoveDuplicatesは指定範囲のデータを直接変更します。マクロ実行後は通常の「元に戻す」で復元できないため、実行前にブックやシートをコピーしておいてください。

また、判定列だけでなく関連する列も含めて範囲を指定してください。例えばA列だけにRemoveDuplicatesを実行すると、隣の列とデータの対応関係が崩れるおそれがあります。

最後に

いかがでしたでしょうか。今回は、RemoveDuplicatesで1列・複数列を条件に重複データを削除する方法をご紹介しました。ColumnsとHeaderの指定、実行前のバックアップを意識して活用してください。少しでも参考になれば幸いです。

開発依頼について

ココナラでWebスクレイピング開発サービスを出品しております。

自分で開発をしようと思ったけど、VBAでのネット記事が少なく困っている方も多いかと思います。

そんな方はいつでもお気軽にご相談ください。

また、本ブログからご依頼いただいた方については割引特典がございますので、

ご不明点と合わせてメッセージをいただけると幸いです。

業務の流れをまるごと自動化します Excel・Web・Teams・SaaSで業務全体を自動化

Webスクレイピング以外にもWebアプリの開発サービスも出品しております。

こちらについても、本ブログからご依頼いただいた方については割引特典がございますので、

お気軽にご相談ください。

スモールスケールのWebアプリ開発します 先ずはスモールスケールのWebアプリから始めませんか?

ご興味がある方はこちら!!

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA