【Excel】【PowerQuery】2つの名簿の姓名の名寄せ(例:新字体と旧字体混在)/「照合元」と「照合先」を見比べながら潰し込む
種々のシステムを稼働していると、複数の名簿の「名寄せ」を行う必要が出てくることがあります。
例えば、システム移行等のケースでしょうか。
そして、名寄せは、色々と問題が多く、思った以上に手間がかかります。対応方法についてお話します。
姓名の名寄せについて
名寄せには色々な種類がありますが、「姓名」に絞ってお話していきます。(他にも、◆住所[1丁目1番/1-1]や◆会社名[株式会社/(株)」等、名寄せは、奥深く問題も大きいです。)
「ある業務で実施している名簿」を、「別の名簿」と照合する際には、それぞれの名簿に同じ「ユニークな社員番号等」があれば良いですが、無い時は、名前や所属で名寄せしていくことになります。
これが結構やっかいです。
以下のような問題があるからです。
1.名寄せが出来ないケース(表記ゆれ等)
①表記ゆれ:スペース問題
・姓名の間のスペースで半角全角の混在がある
・前後にスペースが入っている
②表記ゆれ:漢字の相違(斉藤・斎藤)
③所属が変わっている
④改姓していて、どちらかの名簿の改姓が未対応
2.解決方法
①スペース問題
関数で解決可能
いったんスペースをなくしてしまうのが、便利な方法です。(ただし英文字の氏名の場合は、考慮する必要がありますが)
◆Excelでの対応:SUBSTITUTE関数を使う
=SUBSTITUTE(文字列,検索文字列,置換文字列)
佐々木 一朗→佐々木一朗
(間のスペースが半角でも全角でも前後にスペースがあっても全てスペース無しにする)
◆PowerQueryの方法:Text.Replaceを使う
=Text.Replace(Text.Replace([氏名],” “,””),” ”,””)
ExcelのSUBSTITUTEと同じ様に入れ子にします。
※TRIMは、文字と文字の間のスペースの詰め方に独特の癖があるので、この場合は使いません。
用途が適切な時は使うんですけどね。
②~④漢字相違や改姓・所属相違
目視を簡単にするよう工夫した上で、手動を交えて解決する
※その他、文字読替テーブルを作って、VBAで目視をサポートする方法もあります。
VBAの場合は、一文字ずつ読替テーブルと照らし合わせる方法と正規表現を使う方法が考えられますが、それも万能という訳では無く、最後は人間の目での判断も必要となります。
3.名寄せの目視での潰し込みを簡単にする工夫
1行ずつ「名寄せ可能な文字に入れ替えることで、参照OKにする」という方法です。
4.VLOOKUPでの対応方法
①前処理
・参照先(B名簿)に「名寄せ加工用氏名」列(ダミー列)を作り、いったんB氏名をコピーする
・名簿A・名簿Bとのみ照合用キー(所属+氏名)欄を作る。
・名簿Aには、VLOOKUPでBのIDを表示させ(キーと参照先はそれぞれ照合用キー)
・名簿Bには、VLOOKUPでAの照合キーを表示させる。
②同じ人だと思われる場合、A氏名をダミー列にコピー
③当然のことながら、参照可能となり、それぞれの「#N/A」が無くなる。
④こうやってどんどん絞り込む
5.PowerQueryの方法