エクセルで、姓と名の間にスペースがある氏名から「姓」と「名」に分割する方法は簡単です。
ところが、姓と名の間にスペースや区切り文字がない場合、「姓」と「名」に分割するのは非常に難しい作業となります。
さすがのエクセルも、人名から名字を自動で取り出す機能はありません。
今回は、下図のように「スペースのない氏名(姓名)」から、「姓」と「名」に分割する方法のご紹介です。
名字のデータベースを活用して名字(姓)を確定
まずは、名字のデータベースを用意します。
「全国・都道府県別ランキング – 全国名字ランキング」から名字のデータを今回はサンプルとして500位まで参考にさせていただきました。
そして、名字のデータベース範囲(A2~A501セル)に「名字」という名前を定義します。
これで準備は完了です。
氏名から名字だけを確定させるには「VLOOKUP関数」で
氏名から名字だけを抜き出す(取り出す)には、問題があります。ほとんどの名字は2文字ですが、3文字や1文字の名字の方もたくさんいらっしゃいます。
4文字の名字は3657位の勅使河原さんです。今回ご紹介する記事を応用すれば4文字以上の名字の対応も可能となりますが、今回の記事では3文字の名字までとしています。
それでは本題に入ります。「VLOOKUP関数」と「文字列関数」を使用しますので、不安な方はこちらの記事を先にご覧ください。
氏名の前から3文字が名字として存在するかをチェック
まずは、姓名から左3文字を抜き出し、その3文字が先ほどの「名字」データベースに存在するかどうかを確認します。
そしてその3文字が「名字」データベースに存在するならば「3文字」の列(B列)に表示させ、なければ空白にします。
数式は下記のようになります。
=IFERROR(VLOOKUP(LEFT($A2,3),名字,1,FALSE),"")
数式の簡単な説明ですが、A列に格納されている姓名から左3文字を「LEFT関数」で取り出し、その3文字が名前で定義したデータベース「名字」に含まれているかどうかを「VLOOKUP関数」で検索します。もし、存在すればその3文字を表示し、なければ(エラーになれば)「IFERROR関数」で空白(””)にするという意味です。
ちなみに「LEFT($A2,3)」の部分で列のみ絶対参照にしているのは、参照する氏名(姓名)がA列で、数式をC列D列にコピーする際に範囲が変更しないようにするためです。
セルB2の数式をオートフィルでコピーした結果が下図になります。
見事に「佐々木」さんだけが表示されているのがお分かりいただけるでしょうか。ちなみにE列とF列はすでに姓名に分割されていますが、こちらの数式については後述します。
氏名の前から2文字が名字として存在するかをチェック
続いて、氏名の前から2文字が名字として存在するかをチェックします。
B2セルの数式をC2セルにコピーして、「LEFT関数」の部分を2文字にするだけです。
「$A」のみ絶対参照にしたのはそのためです。
=IFERROR(VLOOKUP(LEFT($A2,2),名字,1,FALSE),"")
C2セルの数式をC9セルまでコピーします。すると、下図のように先頭の2文字が名字として存在すればその行のみ表示されています。
氏名の前から1文字が名字として存在するかをチェック
最後に氏名の先頭から1文字が名字として存在するかをチェックします。
数式はもうお分かりでしょうか。C2セルの数式をD2セルにコピーし、「LEFT関数」の文字数を「1」にするだけです。
=IFERROR(VLOOKUP(LEFT($A2,1),名字,1,FALSE),"")
D2セルの数式をD9セルまでコピーした結果が下図です。
ちなみに文字数を3文字目から検索した理由は、逆にするとミスが起こるからです。上図のように「原田」さんは「原」でも名字になりますし、「原田」でも名字になります。
そういったエラーを回避するために、文字数の多い3文字目から検索をしています。
「原田」さんの行には「原田」と「原」の2つの名字が表示されていますが、この後の「IFS関数」で対応しますので大丈夫です。
「IFS関数」で姓(名字)を確定させる
姓(名字)を確定させるには、「IFS関数」を利用します。
「姓」を表示させるE2セルには、下記の数式が入力されています。
=IFS(B2<>"",B2,C2<>"",C2,D2<>"",D2)
上記の数式の意味は、順にB2セルが空白でなければB2セルの値を表示、C2セルが空白でなければC2セルの値を表示、D2セルが空白でなければD2セルを表示する、という意味です。
ですから先ほどの「原田」さんは「原」ではなく「原田」が先に条件に一致して表示されるということになります。
下図をご確認ください。
ここまでくれば名(名前)を取り出すのは簡単 「RIGHT関数」と「LEN関数」で
いよいよ最後です。「姓」(名字)が確定していれば「名」を取り出すのは簡単です。F2セルの数式はこちらです。
=RIGHT(A2,LEN(A2)-LEN(E2))
意味は「姓名」(氏名)の格納されたセルから、「姓名」の文字列の数に「姓」の文字数を引いた文字数を右から取得するという意味です。
以上です。そしてB列からD列を非表示した完成図が下記のようになります。
スペースのない氏名から「姓」と「名」に分割する方法の紹介でした。意外と簡単に作成することができることがお分かりいただけたのではないでしょうか。
もし4文字または5文字以上の名字にも対応させる必要があれば、列を増やしていき、「IFS関数」の分岐を増やすことで対応可能です。ポイントは長い名字から検索していくことだけです。
また、エラーが表示されたら「名字」データに「姓」を追加していくだけですので、メンテナンスも簡単です。
こちらは、日本語の名字で最大の5文字に対応する記事です。
ご不明な点がありましたら、コメントいただけたら回答致します。
こちらnoteにて、完成版ファイルをアップしています。ぜひご利用ください。
コメント