Excelでデータを扱っていると、同じ名前や商品コード、IDなどが複数回出現している(=重複している)データを抽出して確認したい場面が頻繁にあります。
たとえば、
顧客リストで重複登録がないかチェックしたい
注文データで同じ注文番号が複数存在していないか調べたい
社員のIDが重複していないか確認したい
このような場面では、「重複を削除する」のではなく、「重複しているデータだけを抽出する」必要があります。
本記事では、Excelで重複データを見つけて抽出する実践的な方法を、関数・条件付き書式・Power Query・VBAに分けて丁寧に解説します。
目次
重複抽出とは?「削除」とは違う操作
まず理解しておきたいのは、「重複削除」と「重複抽出」は目的も結果も異なるということです。
| 操作 | 内容 |
|---|---|
| 重複削除 | 同じデータを取り除いて、1件だけ残す(他は消える) |
| 重複抽出 | 重複しているデータだけをピックアップして表示する |
「重複の有無を調べたい」「重複しているレコードを確認して修正したい」といった目的には、重複抽出が適しています。
【Excel】重複削除を正しく行う方法|関数・フィルター・Power Queryを使いこなす実践ガイド
✅ COUNTIF関数で重複データを抽出する方法(全バージョン対応)
基本の式:
=COUNTIF($A$2:$A$100, A2)>1
この式は、A2の値が範囲A2:A100に2回以上登場しているかどうかを判定します。
「TRUE」なら重複しています。
手順
データの隣に列を追加し、上記の式を入力
オートフィルでコピー
フィルターで「TRUE」の行だけを抽出
必要に応じて別シートにコピー
メリット
重複の有無が一目でわかる
古いExcelバージョンでも使える
条件を拡張して部分一致にも対応可能
【Excel】削除せずに最新データだけを別シートへ出力する方法|関数・Power Query・VBAによる自動抽出テクニック
✅ 条件付き書式で重複セルを色で可視化する方法
抽出というよりは視覚的に重複を発見したい場合に便利なのが条件付き書式です。
操作手順
重複チェックしたい列を選択(例:氏名列)
「ホーム」タブ →「条件付き書式」→「セルの強調表示ルール」→「重複する値」
書式(赤塗りなど)を選択して「OK」
これにより、重複しているセルが即座に色分けされるので、視認性が非常に高くなります。
注意点
抽出ではないため、別リストとして使うにはコピー&フィルターが必要
一度に複数列を選択すると全体での重複判定になるので注意
【Excel】重複データを抽出し件数をカウントする方法|関数・ピボット・Power Queryを活用した集計テクニック
✅ フィルター+COUNTIFで重複だけを一覧にする方法
COUNTIFとフィルターを組み合わせれば、「重複している値だけの一覧」を簡単に作成できます。
例:A列に氏名がある場合の操作
B列に以下の式を入力:
=IF(COUNTIF(A:A, A2)>1, "重複", "")
「重複」と表示された行をフィルターで表示
必要に応じてコピー&別シートに貼り付け
この方法は簡単で柔軟性が高く、実務でもよく使われます。
【Excel】重複の削除を“行単位”で行う方法|1行全体の重複チェックと削除手順を徹底解説
✅ Power Queryで重複のみを抽出する方法(自動更新にも対応)
Power Queryを使えば、重複データだけを抽出するクエリを作成でき、元データの更新にも対応できます。
手順
「データ」タブ →「テーブルまたは範囲から」
Power Queryエディタが起動
対象列を選択 →「グループ化」
カウント列(回数)を追加
フィルターで「カウントが2以上」の行だけを残す
「閉じて読み込む」で結果を出力
特徴
元データの変更に強い(更新ボタンで再抽出可能)
複数列の重複判定も可能
ノーコードで誰でも使える
✅ VBAで重複のみを抽出して別シートに一覧化
VBAを使えば、条件に合致する重複だけを一括抽出して別シートに出力することが可能です。
サンプルコード
Sub 重複データ抽出()
Dim ws As Worksheet, outWs As Worksheet
Dim dict As Object, lastRow As Long
Dim i As Long, key As String, outRow As Long
Set ws = ActiveSheet
Set outWs = Worksheets.Add
outWs.Name = "重複一覧"
Set dict = CreateObject("Scripting.Dictionary")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
outRow = 1
For i = 2 To lastRow
key = ws.Cells(i, 1).Value
If dict.exists(key) Then
outWs.Cells(outRow, 1).Value = key
outRow = outRow + 1
Else
dict.Add key, i
End If
Next i
MsgBox "重複データを抽出しました", vbInformation
End Sub
特徴
A列の重複を抽出して新しいシートに出力
大量データも高速処理可能
カスタマイズ性が高い(列変更・複数キー対応も可)
・よくある注意点と対処法
| 問題 | 原因 | 解決策 |
|---|---|---|
| 同じ名前でも空白があると別扱い | スペース、全角・半角の違い | TRIM, CLEAN, UPPERなどで前処理 |
| 数字と文字列の見た目が同じで判定ミス | "001"と1は内部的には別物 | セル書式を統一、文字列変換を事前に行う |
| 順番がぐちゃぐちゃになる | 関数結果に並び順の指定がない | SORT関数やソート機能で明示的に整える |
まとめ:重複抽出の技を使い分けてデータの信頼性を高めよう
Excelでの重複抽出は、データ品質の管理・名寄せ作業・トラブル回避など、さまざまな場面で不可欠です。
| 方法 | 特徴 |
|---|---|
| COUNTIF関数 | シンプルで柔軟。古いバージョンでも使用可能 |
| 条件付き書式 | 視覚的に重複を把握したいときに最適 |
| フィルター併用 | 一覧作成に向いており、再利用も容易 |
| Power Query | 更新可能・複数列対応・高度な処理に強い |
| VBA | 大量データ・自動化に対応。別シート出力も簡単に可能 |
用途や目的に応じて最適な手法を選び、Excelの重複抽出スキルを業務の中で存分に活かしてみてください!