CSVの「重複チェック」は、重複行を消す作業ではない。
最初に決めるべきなのは、何が同じなら重複と呼ぶのかだ。
重複キーを先に決める
たとえば顧客CSVなら、候補は次のようになる。
- 顧客ID
- メールアドレス
- 電話番号
- 会社名 + 担当者名
- 外部システムのID
商品ならSKU、注文なら注文番号など、業務によって一意性の基準は変わる。
「1行まるごと同じ」だけを探しても、実務上の重複を見逃すことがある。
完全重複とキー重複は分けて考える
完全重複は、全列の値が同じ行。
キー重複は、指定した列だけが同じ行。
たとえば次の2行は完全重複ではない。
a@example.com,Alpha,札幌
a@example.com,Alpha Inc.,札幌
しかしメールアドレスを一意キーにするなら重複だ。
どちらを問題にするかは、インポート先のルールで決める。
表計算で確認する
ExcelやGoogle Sheetsで小さなCSVを見るなら、COUNTIFを使う方法が簡単だ。
A列がメールアドレスなら、補助列に次のような式を入れる。
=COUNTIF($A:$A,A2)
結果が2以上なら、その値は複数回出現している。
ただし、ヘッダーを含む位置や空欄の扱いには注意する。空欄を重複として数えるかどうかも先に決める。
「重複だから削除」は危険
同じメールアドレスが2行あっても、片方が古いデータとは限らない。
例として、
- 同じ会社の共有メールアドレス
- 1人が複数契約を持つ
- 同じSKUでも倉庫が違う
- 注文番号は同じでも明細行が複数ある
といったケースがある。
だから安全な重複チェックは、削除ではなくフラグを付けるところから始める。
「何行目と重複しているか」をレポートに残せると、確認が楽になる。
大きなCSVでは再現性を優先する
数十行なら目視でも確認できる。
しかし数千行以上になると、毎回フィルターや式を組み直すより、同じルールで繰り返せる方法が向いている。
最低限、次が残る形にする。
- 対象ファイル
- 重複判定に使った列
- 重複した行番号
- 最初に出た行番号
- 実行日時または版
これで「なぜこの行を止めたのか」を後から追える。
重複チェックの順番
- 一意であるべき列を決める
- 空欄をどう扱うか決める
- 重複を検出する
- 行番号付きで確認する
- 削除・統合は業務ルールに従って別工程で行う
- 修正後にもう一度チェックする
重複検出の挙動を試すための無料CSVサンプルも用意した。
「見つける」と「直す」を分ける。それだけでCSV作業はかなり壊れにくくなる。