データの重複を簡単にチェックする関数と方法

データの重複を簡単にチェックする関数と方法 IT

第1章:そもそも「データの重複」とは何か?

日々の業務でExcelや社内システムを使っていると、いつの間にかデータが「重複」してしまっているケースに出くわします。たとえば、同じ顧客が2回登録されていたり、同一の注文履歴が複数行存在していたり…こういった「データの重複」は、見落とすと意外と大きなトラブルの原因にもなります。

データの重複とは?

そもそも「データの重複」とは何かというと、「本来1つであるべき情報が、同じまたはほぼ同じ内容で複数存在してしまっている状態」のことです。

例えば次のような例を見てみましょう:

001, 佐藤太郎, taro.sato@example.com
002, 佐藤 太郎, taro.sato@example.com
003, 佐藤太郎, taro.sato@example.com

この3件のうち、001と003は完全に重複しています。また002も氏名の表記ゆれ(全角スペースの有無)こそあれ、内容としては実質的に重複といえます。

なぜ重複が問題なのか?

データの重複が起こることで、以下のような問題が発生します:

  • 集計ミス:売上データで同じ注文が2回カウントされてしまう。
  • レポート品質の低下:不正確な情報で判断ミスが起きやすくなる。
  • マーケティングの非効率化:同じ顧客に複数回DMを送ってしまうなどの無駄が発生。

このように、些細なミスに見えても、数字の精度や業務の信頼性に直結するのが「重複データ」の怖いところです。

よくある重複データのパターン

では具体的に、どんな場面で重複は起きやすいのでしょうか?若手社員の方が特に気をつけたい、以下のようなケースを紹介します。

  1. 顧客名簿:同じ名前・同じメールアドレスが複数エントリーされている。
  2. 取引履歴:売上データに同じ伝票番号の商品明細が2行登録されている。
  3. 勤怠記録:同じ社員番号で2つの日報が存在している。

多くの場合、これらの重複は手入力やコピペ、データのマージミスで生じます。だからこそ、作業時の注意と合わせて、ツールを使ったチェックが大切になってくるのです。

次章では、まずExcelを使って簡単に重複をチェックするテクニックを解説していきます。「関数はちょっと苦手…」という方でも安心して使える方法をご紹介するので、ぜひ実践してみてください!

第2章:エクセルでできる!かんたん重複チェック法

「とりあえずExcelで管理してる」という方も多い中で、データの重複チェックは思っている以上にかんたんに実施できます。ここでは、関数が得意でなくても使える方法から、ちょっと応用的な関数まで、Excelでの重複チェック手段をステップごとに解説します。

その1:条件付き書式でカンタン可視化

まず始めにおすすめなのが、条件付き書式による重複チェックです。これは、指定した列の中で重複しているセルを自動で色付けしてくれる機能です。

操作手順:

  1. 重複を確認したい列(例:メールアドレス列)を選択
  2. リボンの「ホーム」→「条件付き書式」→「セルの強調表示ルール」→「重複する値」を選択
  3. 好きな強調スタイル(赤背景など)を選んで「OK」

これだけで、同じ値が2つ以上存在するセルにハイライトが付き、視覚的に重複箇所を確認できます。特に顧客情報や社員名簿などの場合、有効なチェック方法です。

その2:重複の削除ツールを使ってみる

「重複を見つけるだけでなく、まとめて削除したい」という場合には、Excelの[重複の削除]機能を使いましょう。

使い方は以下のとおり:

  1. 重複が存在する可能性のあるデータ範囲を選択
  2. リボンの「データ」タブ→「重複の削除」をクリック
  3. 重複判定に使うカラム(列)を選択して「OK」

すると、選択した条件で重複している行が削除されます。注意点として、この操作は元のデータを直接削除するため、まずはファイルをコピーするか、「元データ」シートを控えとして残しておくと安心です。

その3:COUNTIF関数で重複を数える

より細かく、関数で重複を見つけたい方には、COUNTIF関数がおすすめです。この関数は「指定した範囲で同じ値が何回出てくるか」を返してくれます。

書式:
=COUNTIF(検索範囲, 検索値)

例:
A列がメールアドレスの列とした場合、B列に以下のような式を入れることで、各メールアドレスが何回出現するか確認できます:

=COUNTIF(A:A, A2)

この式を下にコピーしていくことで、同じメールアドレスが複数ある行では2以上の数値が表示されます。逆に「1」と表示されている行は唯一無二のデータです。

この方法で、削除するべき重複データの候補を絞り込むことができます。ちなみにこの列にフィルターをかけて「2以上」で抽出すれば、重複データだけを表示することも簡単です。


このように、Excelには標準で使える重複チェックの機能がいくつも用意されています。関数に苦手意識がある方は「条件付き書式」や「重複の削除」から始めてみて、より深く理解したい方は「COUNTIF」などの関数を活用してみてください。

次章では、Excelよりも複雑なデータセットを扱う場面で役立つPythonによる重複チェック方法をご紹介します。定型業務の自動化や大量データの一括処理をしたい方は、ぜひそちらもチェックしてください!

第3章:Pythonでスマートにチェック!重複検出関数のコード例

Excelでは小~中規模のデータ処理には非常に便利ですが、もっと大量のデータや、自動化を前提とした業務になると、Pythonを使った重複チェックが真価を発揮します。

データ分析の現場では、Pythonとその代表的なライブラリ「pandas」を使用することで、重複の検出から削除までを数行のコードで簡単かつ正確に行うことができます。

pandasって何?

pandasは、Pythonを使って表形式のデータ(DataFrame)を操作するためのライブラリです。Excelでいう表計算の感覚に近く、CSVやExcelファイルの読み込み・整形・加工・出力が非常に得意です。

それでは、Pythonとpandasを使って、実際に重複データを見つける方法を見ていきましょう。

重複チェックの基本:duplicated()関数

pandasで重複チェックをする場合、duplicated()が基本構文です。以下のように使います:

import pandas as pd

# CSVファイル読み込み(例:名簿データ)
df = pd.read_csv('customers.csv')

# 重複を確認(全列が同じかどうか)
duplicates = df[df.duplicated()]

print(duplicates)

このコードでは、行全体が前の行と完全に一致している場合に、その行を「重複」として抽出しています。

特定の列だけで重複をチェックしたいときは、以下のように列名を指定します。

# メールアドレスだけで重複判定
duplicates_by_email = df[df.duplicated(subset='email')]

このように、subset引数にチェックしたい列名(または複数列のリスト)を指定することで、部分的な一致を検出できます。

重複行の削除:drop_duplicates()関数

重複を見つけたら、次はそれを削除したくなりますよね。そんな時に使えるのがdrop_duplicates()関数です。

# 重複行の削除(最初に出現した1件を残し、以降の重複を削除)
df_clean = df.drop_duplicates()

# データを新しいCSVとして出力
df_clean.to_csv('clean_customers.csv', index=False)

drop_duplicates()duplicated()と同じく、subsetで任意の列だけを判定対象にすることができます。

# 「email」列の重複だけを削除
df_clean = df.drop_duplicates(subset='email')

実務ですぐ使えるサンプルスクリプト

最後に、実際の業務でそのまま使える簡単なスクリプトをご紹介します。これは「メールアドレスで重複をチェックして削除し、結果を新ファイルに書き出す」という処理です。

import pandas as pd

# 元データの読み込み
df = pd.read_csv('customers.csv')

# 重複を表示して確認(ログ的に表示)
print("以下が重複データです:")
print(df[df.duplicated(subset='email')])

# 重複を削除して保存
df_clean = df.drop_duplicates(subset='email')
df_clean.to_csv('customers_cleaned.csv', index=False)
print("重複削除後のデータを'customers_cleaned.csv'に出力しました。")

このスクリプトをターミナルから実行するだけで、重複の可視化→不要データの削除→クリーンデータの保存まで一連の作業を自動でこなしてくれます。

まとめ

Python(特にpandas)の力を使うことで、手間なく、かつ正確に重複データをチェック・削除することができます。エクセルよりも再現性・自動化性に優れ、CSVや複雑なデータ構造との相性も良いため、システム開発や大量のデータ処理に関わるサラリーマンの方には必須スキルといえます。

次章では、Pythonよりもさらにデータベースに近い視点で、SQLを使った重複検出・削除の方法を紹介します。日々の業務でDBにアクセスする機会がある方は、必見です。

第4章:SQLで重複データを抽出・削除する方法

日々の業務で顧客情報や取引履歴など、大量のデータをデータベースで管理している場面も多いのではないでしょうか。ここでは、SQL(Structured Query Language)を使ってデータベース上の重複を検出・削除する方法を解説します。

SQLを使うメリットは、データの絞り込み・整理が効率よく行えることです。しかも、PythonやExcelとは異なり、直接DBの中で処理できるため、パフォーマンスも良好。以下に、実務でもすぐ活用できるテクニックをご紹介します。

GROUP BYとHAVING句で重複レコードを抽出

まずは「どのデータが重複しているのか?」を調べたいときに使えるのがGROUP BYHAVING句です。

SELECT email, COUNT(*) AS count
FROM customers
GROUP BY email
HAVING COUNT(*) > 1;

このSQLは、customersテーブルの中で、emailが2件以上登場しているものだけを抽出します。つまり、重複しているemailを持つデータを一覧で確認できます。

さらに詳細を見たい場合は、以下のようにIN句を組み合わせて、実際に重複している行を抽出できます:

SELECT *
FROM customers
WHERE email IN (
  SELECT email
  FROM customers
  GROUP BY email
  HAVING COUNT(*) > 1
);

ROW_NUMBER()で重複行を識別

SQLで重複を削除するには、まず「どの行を残して、どれを削除するか」をはっきりさせる必要があります。そこで便利なのがROW_NUMBER()を使った方法です。

WITH customer_ranked AS (
  SELECT *,
         ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
  FROM customers
)
SELECT *
FROM customer_ranked
WHERE rn > 1;

このSQLは、同じemailごとにid順で並べ、ROW_NUMBER()で行番号(1,2,3…)を振ります。rn > 1の行は重複の中で「2件目以降」のデータとなり、削除対象として抽出できます。

DELETE文による重複行の削除

重複のデータが分かったら、次はいよいよ削除です。先ほどのROW_NUMBER()を応用すれば、安全に重複データを取り除けます。

WITH customer_ranked AS (
  SELECT id,
         ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
  FROM customers
)
DELETE FROM customers
WHERE id IN (
  SELECT id
  FROM customer_ranked
  WHERE rn > 1
);

このSQLのポイントは、先にDELETE対象のIDをサブクエリで列挙してから削除している点です。これにより、同じemailの中で最も古い(idの小さい)データだけを残し、あとは削除できます。

💡実務Tips:DELETE文を実行する前に、SELECTに置き換えて実行結果を確認すると安全です。不意な全削除や想定外のデータ損失を防げます。

まとめ

SQLを使った重複チェックと削除は、大量データを扱う場面や、データベース内で処理を完結させたい業務にぴったりです。特に企業のDBにアクセスできる環境にある方にとっては、業務効率を圧倒的に上げられる武器となります。

次章では、そもそも重複が起きないようにするための運用の工夫やチェック体制についてご紹介します。データのクオリティ管理に関心がある方は、ぜひ読み進めてみてください。

第5章:ミスを防ぐ!データ重複を未然に防ぐ運用Tips

これまでの章では、Excel、Python、SQLといったツールを使って「すでに発生した重複データを見つけて対応する方法」に注目してきました。しかし、もっとも理想的なのは重複を最初から発生させないこと。本章では、重複データを未然に防ぐために業務フローに取り入れたい実践的な予防策をご紹介します。

1. 入力時点でのチェック体制をつくる

データの重複は、入力作業を行うタイミングで防止できるケースが多いです。たとえば、新しい顧客情報を登録する際、そのメールアドレスがすでに登録されていないかを自動でチェックする仕組みを導入することで、同一人物の二重登録を防げます。

たとえば社内ツールやGoogleフォームで入力を受け付ける際、「既存データと重複があれば警告」を出すようなフォーム設計にするだけでも効果は抜群です。システム開発が難しくても、ExcelのVLOOKUPXLOOKUPといった簡単な関数で事前確認をするような運用を習慣づけるだけでも違いが出ます。

2. 入力フォームやバリデーションの工夫

Webフォームや業務システムの入力画面には、正確なデータを求める「バリデーション」機能を付け加えることで、人為的な重複を減らすことができます。

  • 自動的に全角⇔半角を統一する
  • 郵便番号や電話番号をフォーマットに従わせる
  • すでにあるメールアドレスを入力できないようエラー表示

こうした仕組みを取り入れることで、「佐藤太郎」と「佐藤 太郎(全角スペースあり)」のような微妙な違いによる重複も防げます。エンジニアでなくても、Googleフォームのスクリプト機能や、Excelのデータ入力規則を使うことで簡易的なバリデーション設定は可能です。

3. 定期的なデータクレンジングのすすめ

どれだけ事前対策をしていても、長く運用するうちにどうしても重複は紛れ込みます。そこで重要になるのが、定期的な「データクレンジング」の習慣です。

月1回や四半期に1度のペースで、名簿や売上データ、勤怠記録などの中に重複がないかをチェックしておきましょう。次のような習慣づけを推奨します:

  • ExcelならCOUNTIF条件付き書式による簡易チェック
  • PythonスクリプトやSQLクエリを定型化して、定期実行(バッチ化)
  • SaaS系ツール(CRMや会計ソフトなど)のデータをCSVでエクスポートし検査

日々忙しい業務の中で、これらを「ルーティン作業」としてシステム化・自動化できれば、ミスを防ぐだけでなく業務効率も大幅アップします。

🔧ワンポイント: データベースを使っている場合は、UNIQUE制約INDEXを活用すると、同じ値の登録そのものを物理的に防止できます。システム部門と連携し、事前の設計から重複対策を意識しましょう。

まとめ

どれだけ優れたツールを使っても、重複の原因が業務の仕組みにある限り、同じミスを繰り返してしまいます。重複を「検出する」のではなく、「発生させない」意識と工夫が、データ品質を守り、組織全体の信頼性を高める第一歩です。

日々のちょっとした工夫が、やがて大きなミスや無駄な作業を防ぐ鍵となります。今回紹介したTipsをぜひ今日から業務の中に取り入れ、未来の自分をラクにしていきましょう!

コメント

NewsTowerをもっと見る

今すぐ購読し、続きを読んで、すべてのアーカイブにアクセスしましょう。

続きを読む