Excel一覧 Excel操作 検索・抽出 重複データの処理と可視化 重複データの削除

【Excel】重複削除の条件を複数列で指定する方法|関数・Power Query・VBAで柔軟に対応する方法を解説

Excelでデータを整理するうえで「重複を削除する」作業は非常に頻繁に行われますが、単一の列ではなく複数列を条件にして重複を削除したいという場面も多いのではないでしょうか。

たとえば以下のような状況です:

  • 氏名だけでなく、生年月日も一致する場合のみ重複とみなしたい

  • 部署と社員番号の両方が一致している行を削除対象にしたい

  • 商品コードと仕入先のペアが重複している場合のみ1件を残したい

こうしたケースでは、複数の列を組み合わせて1つの「重複判定キー」として扱う必要があります。
本記事では、Excelにおける「複数列を条件にした重複削除」の具体的な方法を、標準機能・関数・Power Query・VBAという観点から詳しく解説していきます。

Excelの「重複の削除」機能で複数列を条件に指定する

Excelの標準機能である「重複の削除」では、複数の列を同時に選んで重複条件に指定することができます。

操作手順:

  1. 重複削除をしたいデータ範囲(例:A1:C100)を選択

  2. 「データ」タブ →「重複の削除」

  3. 「重複の基準」となる列を複数選択(例:氏名・生年月日)

  4. 「OK」を押すと、選択した複数列の値がすべて一致する行だけが重複とみなされ、1件だけ残して削除されます

例:

氏名生年月日部署
山田1990/01/01総務部
山田1990/01/01経理部
山田1990/01/01総務部

→ 「氏名」と「生年月日」で重複削除すると、部署が違う2行は別扱いになります
→ 「氏名+生年月日+部署」の3列をすべて指定して削除すれば、完全一致行のみ削除対象となります

ポイント:

  • 削除されるのは2行目以降の重複行

  • 最初の出現行が残る

  • 元のデータが上書きされるのでバックアップ必須

【Excel】重複削除を正しく行う方法|関数・フィルター・Power Queryを使いこなす実践ガイド

COUNTIFS関数で複数列の重複を判定する方法

Excelの関数を使えば、複数の列を条件にして「重複しているかどうか」を判断することができます。

例:氏名(A列)+生年月日(B列)を条件にする

=COUNTIFS($A$2:$A$100, A2, $B$2:$B$100, B2) > 1

→ この式は、「A列とB列の値が同じ行が2件以上ある場合」に TRUE を返します。

・一意な行だけを抽出方法

  1. 上記の式で FALSE(=出現回数1回)となる行のみをフィルター

  2. 別シートにコピーすることで、重複を含まない一意なデータだけを抽出可能

メリット:

  • 重複判定条件を自由に設定できる

  • 実際に削除する前に「確認」がしやすい

  • 条件付き書式にも応用可能(重複に色をつけるなど)

【Excel】削除せずに最新データだけを別シートへ出力する方法|関数・Power Query・VBAによる自動抽出テクニック

Power Queryで複数列をキーにした重複削除を行う方法

Power Queryでは、「複数列を選択した状態で重複を削除する」ことが可能であり、自動化や更新に強いのが特長です。

操作手順:

  1. 対象のデータを選択 →「データ」タブ →「テーブルまたは範囲から」

  2. Power Queryエディタが起動したら、Ctrlを押しながら複数列を選択(例:氏名・生年月日)

  3. 「ホーム」タブ →「行の削除」→「重複の削除」

  4. 「閉じて読み込む」で別シートに出力

特徴:

  • 選択した複数列すべてが一致する行だけを削除対象にできる

  • 元のデータは保持される

  • データを追加しても「更新」ボタンで再処理可能

複数列を条件にした重複削除は、精度の高いデータ整理を行ううえで非常に重要な方法です。
「1つだけ残す」「最新データを残す」「行単位で削除する」など、条件別の削除方法をまとめて確認したい場合は、次の総合ガイドもあわせて参考にしてください。

【Excel】重複データ削除の完全ガイド|複数列・最新データ・1つだけ残す方法まで徹底解説

VBAで複数列をキーにして重複を削除するマクロ

自動化や大量データを扱う場合は、VBAを使って複数列をキーとする重複削除を効率的に行うことが可能です。

サンプルコード:

Sub 複数列で重複削除()

Dim dict As Object
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Dim key As String

Set ws = ActiveSheet
Set dict = CreateObject("Scripting.Dictionary")

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

For i = lastRow To 2 Step -1

' ここで複数列のキーを連結
key = ws.Cells(i, 1).Value & "|" & ws.Cells(i, 2).Value
If dict.exists(key) Then

ws.Rows(i).Delete

Else

dict.Add key, 1

End If

Next i

MsgBox "複数列の重複を削除しました。"

End Sub

ポイント:

  • key に複数列の値を連結して、1つの文字列として辞書で管理

  • | などの記号を区切りにしておくと、誤認識が防げる

  • 最初の出現行だけが残る(下から削除しているため安全)

・注意点とトラブル回避

問題原因解決策
重複が正しく削除されない空白や全角/半角、日付の文字列化などTRIM, CLEAN, TEXT関数などで前処理を行う
条件が一部しか一致していないのに削除される列の選択ミス、または基準列が正しくない削除対象となる列を正しく指定してから操作する
元データが破壊されてしまった削除前のバックアップがない操作前に「コピーシート」を作成するのが安全
数式コピー時に参照がずれてしまう絶対参照と相対参照が混在している$A$2:$A$100 のように絶対参照で範囲指定を統一する

・まとめ:複数列での重複削除を活用して、より精度の高いデータ管理を実現しよう

Excelでのデータ整理や管理業務において、「重複削除」は基本かつ重要な作業ですが、複数列を条件にした重複削除を使いこなせると、より高精度で柔軟なデータ整備が可能になります。

方法特徴
重複の削除(標準機能)手軽で早いが、元データが破壊されるため注意が必要
COUNTIFS+フィルター条件の自由度が高く、削除前の確認や色付けなどにも応用できる
Power Query自動処理に強く、複数列選択が直感的で更新にも対応できる
VBAマクロ完全自動化に適し、複雑な条件にも柔軟に対応可能

    -Excel一覧, Excel操作, 検索・抽出, 重複データの処理と可視化, 重複データの削除