Excel一覧 Excel操作・関数 データ操作 重複データの削除・強調

【Excel】重複データを完全に削除して一切残さない方法|関数・フィルター・VBAによる実践的アプローチ

Excelでデータのクレンジングを行う際に、「同じ内容が重複している行をすべて削除したい」というニーズは少なくありません。

たとえば以下のような場面があります:

  • 名簿に同じ名前が複数あるが、どれも不要な重複なので完全に削除したい

  • 商品マスタで同じ商品コードが複数登録されており、一意なデータだけを残したい

  • 入力ミスによる2重登録の行をすべて削除してスッキリさせたい

本記事では、Excelで重複データを「1件も残さず」削除する方法を、複数の手法(関数・フィルター・Power Query・VBA)で徹底解説します。

重複データを「完全に削除する」とは?

まず、「重複削除」には以下の2つのパターンがあります:

■ 一部残す削除(通常)

氏名削除後(通常)
山田○(1件残す)
山田×
佐藤

1件は残る

■ 完全削除(今回のテーマ)

氏名削除後(完全)
山田×
山田×
佐藤

重複があればそれを全て消す

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

COUNTIF関数+フィルターで完全削除する方法

手順

  1. B列に以下の式を入力(A列が対象):

    =COUNTIF($A$2:$A$100, A2)>1

→ TRUE:重複している、FALSE:一意

  1. フィルターで「TRUE」の行を表示

  2. 全選択して削除(行削除)

  3. 残りが一意データのみになる

ポイント

  • 必ずすべての重複値を消したいときに有効

  • 削除は行単位で行う(値の消去ではなく行削除)

  • 他の列と一緒に削除されることに注意

【Excel】抽出した一意データを別シートに自動出力する方法|関数・Power Query・VBAによる効率化テクニック

UNIQUE関数+COUNTIFで「一意なデータのみ抽出」する方法

(※ Excel 365 / Excel 2021以降)

最新のExcelでは、UNIQUE関数とFILTER関数を組み合わせることで、重複を含むデータを丸ごと除外することができます。

手順

  1. 出現回数をカウント:

    =COUNTIF(A:A, A2)

  2. 「出現回数 = 1」の行だけをFILTER関数で抽出:

    =FILTER(A2:A100, COUNTIF(A2:A100, A2:A100)=1)

→ 一意のデータのみが抽出される

特徴

  • 重複を1件も含まないデータのみを抽出

  • 元のデータに影響なし

  • 動的更新が可能(データが変わると結果も変わる)

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

Power Queryで重複を一切残さず削除する方法

Power Queryを使えば、重複データだけを削除し、一意な行だけを別シートに表示することが可能です。

手順

  1. 「データ」タブ →「テーブルまたは範囲から」でPower Queryを起動

  2. 削除基準となる列を選択(例:氏名)

  3. 「グループ化」→「行数をカウント」

  4. 「行数=1」のグループだけをフィルター

  5. 「閉じて読み込む」で結果を別シートへ出力

メリット

  • 重複があったデータは一切含まれない

  • 元のデータを壊さないため安全

  • データ更新に強く、自動再抽出が可能

【Excel】PDFを取り込む方法【データを活用するテクニック】

VBAで完全に重複している行を削除する方法

大量データや定期処理に最適な方法として、VBAによる自動削除があります。

サンプルコード

Sub 重複を完全に削除()

Dim dict As Object
Dim ws As Worksheet
Dim lastRow As Long, i As Long
Dim value As String
Dim countDict As Object

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

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

' 出現回数カウント
For i = 2 To lastRow

value = ws.Cells(i, 1).Value
If countDict.exists(value) Then

countDict(value) = countDict(value) + 1

Else

countDict.Add value, 1

End If

Next i

' 重複している行を後ろから削除
For i = lastRow To 2 Step -1

value = ws.Cells(i, 1).Value
If countDict(value) > 1 Then

ws.Rows(i).Delete

End If

Next i

MsgBox "重複データを完全に削除しました。"

End Sub

特徴

  • 1件も残さず重複を削除

  • データが多くても高速処理可能

  • 条件の変更(複数列での重複判定など)も対応しやすい

複数列で完全一致する行を削除

たとえば「氏名」+「日付」の組み合わせが完全一致した場合に削除するには、複合キーを作成する必要があります。

例:B列に複合キーを作成

=A2 & "-" & B2

その後、上記のCOUNTIFやVBAを使って削除対象を判定

・ 注意点とトラブル回避

問題原因解決策
数値の"1"と文字列の"1"が区別されてしまうデータ型の不一致TEXT関数で統一、セル書式を確認
半角/全角や空白の違いで別データと判定される微妙な差があって完全一致になっていないTRIM, CLEAN, UPPER関数で事前処理
関数での削除が面倒手動操作が必要な場合があるPower Query または VBAで自動処理に切り替え
元データを誤って上書き削除後に戻せない作業前にコピーシートやバックアップを作成すること

・まとめ:完全な重複削除でクリーンなデータを保とう

「重複を完全に削除して一件も残さない」処理は、データの信頼性と整合性を保つために極めて重要です。
業務の中で一意なリストが必要なときや、集計や分析前の整備作業には欠かせません。

方法対応バージョン特徴
COUNTIF+フィルターすべてのExcelで可能手軽・手動操作が必要
UNIQUE+FILTERExcel 365 / 2021以降自動化・一意データ抽出に最適
Power QueryExcel 2016以降推奨自動更新・視覚的操作・再利用に強い
VBAすべてのExcel対応高速・自動化・大量データにも対応可能

-Excel一覧, Excel操作・関数, データ操作, 重複データの削除・強調