Excelでデータのクレンジングを行う際に、「同じ内容が重複している行をすべて削除したい」というニーズは少なくありません。
たとえば以下のような場面があります:
名簿に同じ名前が複数あるが、どれも不要な重複なので完全に削除したい
商品マスタで同じ商品コードが複数登録されており、一意なデータだけを残したい
入力ミスによる2重登録の行をすべて削除してスッキリさせたい
本記事では、Excelで重複データを「1件も残さず」削除する方法を、複数の手法(関数・フィルター・Power Query・VBA)で徹底解説します。
目次
重複データを「完全に削除する」とは?
まず、「重複削除」には以下の2つのパターンがあります:
■ 一部残す削除(通常)
氏名 | 削除後(通常) |
---|---|
山田 | ○(1件残す) |
山田 | × |
佐藤 | ○ |
→ 1件は残る
■ 完全削除(今回のテーマ)
氏名 | 削除後(完全) |
---|---|
山田 | × |
山田 | × |
佐藤 | ○ |
→ 重複があればそれを全て消す
【Excel】重複削除を正しく行う方法|関数・フィルター・Power Queryを使いこなす実践ガイド
✅ COUNTIF関数+フィルターで完全削除する方法
手順
B列に以下の式を入力(A列が対象):
=COUNTIF($A$2:$A$100, A2)>1
→ TRUE:重複している、FALSE:一意
フィルターで「TRUE」の行を表示
全選択して削除(行削除)
残りが一意データのみになる
ポイント
必ずすべての重複値を消したいときに有効
削除は行単位で行う(値の消去ではなく行削除)
他の列と一緒に削除されることに注意
【Excel】抽出した一意データを別シートに自動出力する方法|関数・Power Query・VBAによる効率化テクニック
✅ UNIQUE関数+COUNTIFで「一意なデータのみ抽出」する方法
(※ Excel 365 / Excel 2021以降)
最新のExcelでは、UNIQUE
関数とFILTER
関数を組み合わせることで、重複を含むデータを丸ごと除外することができます。
手順
出現回数をカウント:
=COUNTIF(A:A, A2)
「出現回数 = 1」の行だけをFILTER関数で抽出:
=FILTER(A2:A100, COUNTIF(A2:A100, A2:A100)=1)
→ 一意のデータのみが抽出される
特徴
重複を1件も含まないデータのみを抽出
元のデータに影響なし
動的更新が可能(データが変わると結果も変わる)
【Excel】重複削除の条件を複数列で指定する方法|関数・Power Query・VBAで柔軟に対応する方法を解説
✅ Power Queryで重複を一切残さず削除する方法
Power Queryを使えば、重複データだけを削除し、一意な行だけを別シートに表示することが可能です。
手順
「データ」タブ →「テーブルまたは範囲から」でPower Queryを起動
削除基準となる列を選択(例:氏名)
「グループ化」→「行数をカウント」
「行数=1」のグループだけをフィルター
「閉じて読み込む」で結果を別シートへ出力
メリット
重複があったデータは一切含まれない
元のデータを壊さないため安全
データ更新に強く、自動再抽出が可能
【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+FILTER | Excel 365 / 2021以降 | 自動化・一意データ抽出に最適 |
Power Query | Excel 2016以降推奨 | 自動更新・視覚的操作・再利用に強い |
VBA | すべてのExcel対応 | 高速・自動化・大量データにも対応可能 |