Home/データクレンジング

Excelで重複削除と名寄せの違いを理解する

OVERVIEW はじめに ―― 重複削除と名寄せは、似ているが別の作業である

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,...))

最初に、記事全体で使用するサンプルデータを作る

STEP 1 完全重複と表記ゆれが混在した9件の名簿を用意する

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まで含めると、すべて別行として扱われ、実質的な重複を見つけられなくなります。

重複削除は「同じ行を消す」、名寄せは「同一候補を判断する」

STEP 2 2つの作業を分けて定義する

重複削除は、指定した列が完全に同じ行を削除する作業です。Excelの「重複の削除」機能やUNIQUE関数で処理できます。

名寄せは、表記ゆれを正規化し、同じ人・同じ会社かもしれない候補を見つける作業です。候補を出すことはできますが、最後に同一と判断するには業務上の根拠が必要です。

重複削除 指定列が一致した行を削除する。機械的に処理しやすい。
名寄せ 表記ゆれを整理し、同一候補を見つける。判断が必要。
危険な処理 表記が似ているだけで同一と決めて削除する。

名寄せ候補を見つけた段階で、いきなり行を削除してはいけません。まず候補として表示し、同一かどうかを確認できる状態にします。

COUNTIFSで指定列一致の重複を確認する

STEP 3 E列へ指定列一致件数を作る

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以上の行だけです。指定列が一致していない行を削除するには、まだ根拠が足りません。

名寄せ用のキーを作る

STEP 4 F列へ表記ゆれをならした氏名キーを作る

F1に「氏名キー」と入力し、F2へ次の数式を入力してF10までコピーします。

F2 =SUBSTITUTE(SUBSTITUTE(ASC(B2)," ","")," ","")

ASCで全角英数字や全角スペースを半角へ寄せ、SUBSTITUTEで半角・全角スペースを取り除きます。氏名に含まれる空白の違いをならすための簡易キーです。

B F
1 氏名 氏名キー
2 山田 太郎 山田太郎
3 山田 太郎 山田太郎
4 山田 太郎 山田太郎
5 ヤマダ タロウ ヤマダタロウ
6 佐藤 花子 佐藤花子
7 佐藤花子 佐藤花子
8 鈴木 一郎 鈴木一郎
9 鈴木 一郎 鈴木一郎
10 高橋 美咲 高橋美咲

この時点で、山田太郎、佐藤花子、鈴木一郎は候補としてまとまります。ただし、半角カナの「ヤマダタロウ」は漢字の「山田太郎」とは一致しません。ASCによる正規化は文字種を統一しますが、読み方の異なる表記(漢字と仮名)を同一とみなすことはできないためです。照合するには読み仮名列や別の照合ルールが必要です。

💡 名寄せキーは「同一候補を見つけるための仮のキー」

キーが一致したから同一とは限りません。逆に、キーが一致しないから別人とも限りません。名寄せキーは削除の根拠ではなく、確認すべき候補を減らすための道具です。

STEP 5 会社名キーも作り、法人格の表記ゆれをならす

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 サンプル工業 サンプル工業

会社キーが同じでも、部署違い、支店違い、別法人の可能性があります。会社名だけで同一企業と確定せず、メールドメインや住所など別の情報も確認します。

名寄せ候補を判定し、削除ではなく確認対象にする

STEP 6 H列へ候補件数を作る

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で名寄せキーを一括作成する

STEP 7 LET関数で正規化の段階へ名前を付ける

氏名キーや会社キーの数式は長くなりやすいため、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によって結果が変わるわけではありません。元データ、半角化後、空白除去後、法人格除去後のように、どの段階で何をしているかを式の中に残すことが目的です。

STEP 8 MAP関数で氏名キーと会社キーを一括作成する

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の数式を各行へコピーしてください。

削除してよい行と、確認すべき候補を分ける

STEP 9 J列へ処理区分を作る

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,...))
  1. 重複削除:指定した列が一致する行を削除する作業。
  2. 名寄せ:表記ゆれを整理し、同一人物・同一企業の候補を見つける作業。
  3. 受付ID:行の識別子であり、実質重複を探す条件からは外す場合がある。
  4. 名寄せキー:空白・全角半角・法人格などをならした確認用キー。
  5. 候補判定:キーが一致しても同一確定ではなく、確認対象として扱う。
  6. 削除判断:指定列重複でも、名寄せ候補グループ全体と情報差を確認してから処理する。

重複削除と名寄せを区別する目的は、データを一気に減らすことではありません。機械的に削除してよい行と、人が確認すべき同一候補を分け、誤削除を防ぐことが重要です。