Excelで顧客名簿や取引先リストを整理するとき、「重複を消す」と「名寄せする」が同じ意味で使われることがあります。しかし、両者は目的も危険性も異なります。
重複削除は、同じ条件で指定列が一致する行を削除する作業です。一方、名寄せは、表記ゆれや入力違いを整理し、同一人物・同一企業の候補を判断する作業です。
指定列が一致している行は機械的に処理しやすいですが、表記が少し違う行を同一と決めるには根拠が必要です。本稿では一つのサンプル表を最後まで使い、重複削除と名寄せを分けて確認します。
| 指定列一致件数 | =COUNTIFS($B$2:$B$10,B2,$C$2:$C$10,C2,$D$2:$D$10,D2) |
|---|---|
| 氏名キー | =SUBSTITUTE(SUBSTITUTE(ASC(B2)," ","")," ","") |
| 候補件数 | =COUNTIFS($F$2:$F$10,F2,$G$2:$G$10,G2) |
| 一括処理 | =MAP(B2:B10,D2:D10,LAMBDA(name,company,...)) |
最初に、記事全体で使用するサンプルデータを作る
A列に「受付ID」、B列に「氏名」、C列に「メール」、D列に「会社名」を入力します。完全に同じ行、氏名だけ表記が違う行、会社名だけ表記が違う行、同姓同名に見えるが別人の可能性がある行を混ぜています。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | 受付ID | 氏名 | メール | 会社名 |
| 2 | R001 | 山田 太郎 | taro@example.com | ABC株式会社 |
| 3 | R002 | 山田 太郎 | taro@example.com | ABC株式会社 |
| 4 | R003 | 山田 太郎 | taro@example.com | ABC株式会社 |
| 5 | R004 | ヤマダ タロウ | taro@example.com | ABC株式会社 |
| 6 | R005 | 佐藤 花子 | hanako@example.com | XYZ商事 |
| 7 | R006 | 佐藤花子 | hanako@example.com | XYZ商事株式会社 |
| 8 | R007 | 鈴木 一郎 | ichiro@example.com | 東海物産 |
| 9 | R008 | 鈴木 一郎 | ichiro2@example.com | 東海物産 |
| 10 | R009 | 高橋 美咲 | misaki@example.com | サンプル工業 |
この表では、R001とR002は氏名・メール・会社名が完全に一致しています。一方、R003以降には、全角スペース、全角英字、半角カナ、会社名の法人格表記、メール違いなどが含まれています。
POINT
受付IDは各行を識別するためのIDなので、重複判定の条件には含めません。受付IDまで含めると、すべて別行として扱われ、実質的な重複を見つけられなくなります。
重複削除は「同じ行を消す」、名寄せは「同一候補を判断する」
重複削除は、指定した列が完全に同じ行を削除する作業です。Excelの「重複の削除」機能やUNIQUE関数で処理できます。
名寄せは、表記ゆれを正規化し、同じ人・同じ会社かもしれない候補を見つける作業です。候補を出すことはできますが、最後に同一と判断するには業務上の根拠が必要です。
| 重複削除 | 指定列が一致した行を削除する。機械的に処理しやすい。 |
|---|---|
| 名寄せ | 表記ゆれを整理し、同一候補を見つける。判断が必要。 |
| 危険な処理 | 表記が似ているだけで同一と決めて削除する。 |
名寄せ候補を見つけた段階で、いきなり行を削除してはいけません。まず候補として表示し、同一かどうかを確認できる状態にします。
COUNTIFSで指定列一致の重複を確認する
E1に「指定列一致件数」と入力し、E2へ次の数式を入力してE10までコピーします。
| E2 | =COUNTIFS($B$2:$B$10,B2,$C$2:$C$10,C2,$D$2:$D$10,D2) |
|---|
氏名、メール、会社名の3列が指定列が一致する行数を数えます。R001とR002は指定列一致件数が2になりますが、R003は全角スペースと全角英字が含まれるため、指定列一致にはなりません。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | 受付ID | 氏名 | メール | 会社名 | 指定列一致件数 |
| 2 | R001 | 山田 太郎 | taro@example.com | ABC株式会社 | 2 |
| 3 | R002 | 山田 太郎 | taro@example.com | ABC株式会社 | 2 |
| 4 | R003 | 山田 太郎 | taro@example.com | ABC株式会社 | 1 |
| 5 | R004 | ヤマダ タロウ | taro@example.com | ABC株式会社 | 1 |
| 6 | R005 | 佐藤 花子 | hanako@example.com | XYZ商事 | 1 |
| 7 | R006 | 佐藤花子 | hanako@example.com | XYZ商事株式会社 | 1 |
| 8 | R007 | 鈴木 一郎 | ichiro@example.com | 東海物産 | 1 |
| 9 | R008 | 鈴木 一郎 | ichiro2@example.com | 東海物産 | 1 |
| 10 | R009 | 高橋 美咲 | misaki@example.com | サンプル工業 | 1 |
この段階で安全に処理できるのは、指定列一致件数が2以上の行だけです。指定列が一致していない行を削除するには、まだ根拠が足りません。
名寄せ用のキーを作る
F1に「氏名キー」と入力し、F2へ次の数式を入力してF10までコピーします。
| F2 | =SUBSTITUTE(SUBSTITUTE(ASC(B2)," ","")," ","") |
|---|
ASCで全角英数字や全角スペースを半角へ寄せ、SUBSTITUTEで半角・全角スペースを取り除きます。氏名に含まれる空白の違いをならすための簡易キーです。
| B | F | |
|---|---|---|
| 1 | 氏名 | 氏名キー |
| 2 | 山田 太郎 | 山田太郎 |
| 3 | 山田 太郎 | 山田太郎 |
| 4 | 山田 太郎 | 山田太郎 |
| 5 | ヤマダ タロウ | ヤマダタロウ |
| 6 | 佐藤 花子 | 佐藤花子 |
| 7 | 佐藤花子 | 佐藤花子 |
| 8 | 鈴木 一郎 | 鈴木一郎 |
| 9 | 鈴木 一郎 | 鈴木一郎 |
| 10 | 高橋 美咲 | 高橋美咲 |
この時点で、山田太郎、佐藤花子、鈴木一郎は候補としてまとまります。ただし、半角カナの「ヤマダタロウ」は漢字の「山田太郎」とは一致しません。ASCによる正規化は文字種を統一しますが、読み方の異なる表記(漢字と仮名)を同一とみなすことはできないためです。照合するには読み仮名列や別の照合ルールが必要です。
💡 名寄せキーは「同一候補を見つけるための仮のキー」
キーが一致したから同一とは限りません。逆に、キーが一致しないから別人とも限りません。名寄せキーは削除の根拠ではなく、確認すべき候補を減らすための道具です。
G1に「会社キー」と入力し、G2へ次の数式を入力してG10までコピーします。
| G2 | =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(JIS(ASC(D2)),"株式会社",""),"(株)",""),"(株)","")," ","")," ","") |
|---|
JIS(ASC())で全角・半角の違いをならしつつ、カタカナを半角カナのままにしない形へ寄せます。そのうえで、「株式会社」「(株)」「(株)」などの法人格表記と半角・全角スペースを取り除きます。ここでは説明用に単純化していますが、実務では前株・後株、有限会社、合同会社、記号なども方針を決めます。
| D | G | |
|---|---|---|
| 1 | 会社名 | 会社キー |
| 2 | ABC株式会社 | ABC |
| 3 | ABC株式会社 | ABC |
| 4 | ABC株式会社 | ABC |
| 5 | ABC株式会社 | ABC |
| 6 | XYZ商事 | XYZ商事 |
| 7 | XYZ商事株式会社 | XYZ商事 |
| 8 | 東海物産 | 東海物産 |
| 9 | 東海物産 | 東海物産 |
| 10 | サンプル工業 | サンプル工業 |
会社キーが同じでも、部署違い、支店違い、別法人の可能性があります。会社名だけで同一企業と確定せず、メールドメインや住所など別の情報も確認します。
名寄せ候補を判定し、削除ではなく確認対象にする
H1に「名寄せ候補件数」と入力し、H2へ次の数式を入力してH10までコピーします。
| H2 | =COUNTIFS($F$2:$F$10,F2,$G$2:$G$10,G2) |
|---|
氏名キーと会社キーの組み合わせが同じ行を数えます。完全一致では見つからなかった表記ゆれも、候補として見えるようになります。
| A | F | G | H | |
|---|---|---|---|---|
| 1 | 受付ID | 氏名キー | 会社キー | 名寄せ候補件数 |
| 2 | R001 | 山田太郎 | ABC | 3 |
| 3 | R002 | 山田太郎 | ABC | 3 |
| 4 | R003 | 山田太郎 | ABC | 3 |
| 5 | R004 | ヤマダタロウ | ABC | 1 |
| 6 | R005 | 佐藤花子 | XYZ商事 | 2 |
| 7 | R006 | 佐藤花子 | XYZ商事 | 2 |
| 8 | R007 | 鈴木一郎 | 東海物産 | 2 |
| 9 | R008 | 鈴木一郎 | 東海物産 | 2 |
| 10 | R009 | 高橋美咲 | サンプル工業 | 1 |
R001〜R003は同一候補としてかなり強いですが、R004は半角カナ表記のためこのキーではまとまりません。R007とR008は氏名キーと会社キーが同じですが、メールが違うため同一人物と断定できません。
IMPORTANT
候補件数が2以上でも、すぐに削除するのはNGです。名寄せでは「候補を出すこと」と「同一と確定すること」を分けます。
LET・MAPで名寄せキーを一括作成する
氏名キーや会社キーの数式は長くなりやすいため、LET関数で処理段階へ名前を付けると読みやすくなります。
| 氏名キー | =LET(name,B2,halfWidth,ASC(name),noSpace,SUBSTITUTE(SUBSTITUTE(halfWidth," ","")," ",""),noSpace) |
|---|---|
| 会社キー | =LET(company,D2,normalized,JIS(ASC(company)),noCorp,SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(normalized,"株式会社",""),"(株)",""),"(株)",""),SUBSTITUTE(SUBSTITUTE(noCorp," ","")," ","")) |
LETによって結果が変わるわけではありません。元データ、半角化後、空白除去後、法人格除去後のように、どの段階で何をしているかを式の中に残すことが目的です。
I1に「MAP名寄せキー」と入力し、I2へ次の数式を入力します。
| I2 | =MAP(B2:B10,D2:D10,LAMBDA(name,company,LET(nameKey,SUBSTITUTE(SUBSTITUTE(ASC(name)," ","")," ",""),companyKey,SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(JIS(ASC(company)),"株式会社",""),"(株)",""),"(株)","")," ","")," ",""),nameKey&"|"&companyKey))) |
|---|
結果はI2:I10へスピルします。氏名キーと会社キーを連結した確認用キーを一度に作れます。
※MAP関数を利用できないExcelでは、STEP 7の数式を各行へコピーしてください。
削除してよい行と、確認すべき候補を分ける
J1に「処理区分」と入力し、J2へ次の数式を入力してJ10までコピーします。
| J2 | =IFS(E2>1,"指定列重複",H2>1,"名寄せ候補",TRUE,"単独") |
|---|
| A | E | H | J | |
|---|---|---|---|---|
| 1 | 受付ID | 指定列一致件数 | 名寄せ候補件数 | 処理区分 |
| 2 | R001 | 2 | 3 | 指定列重複 |
| 3 | R002 | 2 | 3 | 指定列重複 |
| 4 | R003 | 1 | 3 | 名寄せ候補 |
| 5 | R004 | 1 | 1 | 単独 |
| 6 | R005 | 1 | 2 | 名寄せ候補 |
| 7 | R006 | 1 | 2 | 名寄せ候補 |
| 8 | R007 | 1 | 2 | 名寄せ候補 |
| 9 | R008 | 1 | 2 | 名寄せ候補 |
| 10 | R009 | 1 | 1 | 単独 |
指定列重複は、削除対象の候補になります。ただし、R001・R002のように指定列が一致している行でも、H列ではR003を含む名寄せ候補グループの一部です。指定列重複だけを先に一括削除すると、名寄せ候補グループの確認前に情報が減る可能性があります。まずグループ全体を確認し、そのうえでどの行を残すか、他の列に情報差がないかを判断します。なお、R004は氏名キーが半角カナ「ヤマダタロウ」のため漢字の「山田太郎」グループとは照合されず、名寄せ候補件数が1となり「単独」に分類されています。
PRACTICAL NOTE
実務では、元データを直接削除するのではなく、処理区分列を作ってフィルターし、別シートへ抽出してから確認する方が安全です。
まとめ ―― 重複削除と名寄せを同じ作業にしない
本稿ではA2:D10の同じ名簿を使い、指定列一致の重複確認、名寄せキーの作成、候補件数の確認、処理区分の作成まで進めました。
| 指定列一致件数 | =COUNTIFS($B$2:$B$10,B2,$C$2:$C$10,C2,$D$2:$D$10,D2) |
|---|---|
| 氏名キー | =SUBSTITUTE(SUBSTITUTE(ASC(B2)," ","")," ","") |
| 会社キー | =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(JIS(ASC(D2)),"株式会社",""),"(株)",""),"(株)","")," ","")," ","") |
| 候補件数 | =COUNTIFS($F$2:$F$10,F2,$G$2:$G$10,G2) |
| 処理区分 | =IFS(E2>1,"指定列重複",H2>1,"名寄せ候補",TRUE,"単独") |
| MAP一括 | =MAP(B2:B10,D2:D10,LAMBDA(name,company,...)) |
- 重複削除:指定した列が一致する行を削除する作業。
- 名寄せ:表記ゆれを整理し、同一人物・同一企業の候補を見つける作業。
- 受付ID:行の識別子であり、実質重複を探す条件からは外す場合がある。
- 名寄せキー:空白・全角半角・法人格などをならした確認用キー。
- 候補判定:キーが一致しても同一確定ではなく、確認対象として扱う。
- 削除判断:指定列重複でも、名寄せ候補グループ全体と情報差を確認してから処理する。
重複削除と名寄せを区別する目的は、データを一気に減らすことではありません。機械的に削除してよい行と、人が確認すべき同一候補を分け、誤削除を防ぐことが重要です。