Excel で名前データから「姓」と「名」を分けて抽出できますか?
前データで「姓」と「名」の間にスペースがあれば可能です。
名前のデータがあったとしても、「姓」と「名」の間にスペースも何もない場合、どこで分離すればいいのか分からないので抽出は難しいです。
逆に言えば「姓」と「名」の間にスペースがある場合、スペースの前後でデータを分割することで「姓」と「名」を分けて抽出が可能です。
たとえば「姓名」データが「A1」にあり、「姓」と「名」の間が「半角スペース」の場合、「B1」に「姓」、「B2」に「名」を抽出するなら「B1」には姓を抽出する以下の式を入力します。
=LEFT(A1, FIND(" ", A1)-1)
「C1」には名を抽出する以下の式を入力します。
=RIGHT(A1, FIND(" ", A1))
ここで使われている関数ですが
- LEFT関数:文字列の先頭から指定された数の文字を返す
- RIGHT関数:文字列の末尾から指定された数の文字を返す
- FIND関数:対象の文字列から指定した文字列を検索し、検索した文字列の開始位置の番号を返す
要するに
- 「FIND(" ", A1)」で「A1」の文字列で半角スペース「" "」の開始位置の番号が分かる
- 「LEFT(A1, FIND(" ", A1)-1)」で「A1」の文字列から半角スペースより前にある文字を抽出
- 「RIGHT(A1, FIND(" ", A1))」により文字列で半角スペースより後ろにある文字を抽出
しているわけです。
この「姓」と「名」の式をオートフィルすると表が完成します。
半角スペースなので「" "」ですが、全角スペースなら「" "」にします。
どちらも対応したいなら「SUBSTITUTE」関数を追加して、「A1」の文字列に全角スぺースがあれば半角に置き換えます。
=LEFT(A1, FIND(" ", SUBSTITUTE(A1, " ", " "))-1)
=RIGHT(A1, FIND(" ", SUBSTITUTE(A1, " ", " ")))
これらの関数と組合せは、たとえば「Copilot」に『姓名データから姓と名を分けて抽出する関数はありますか?』と聞いても同様の式を教えてくれるでしょう。
◆◇◆
規則正しく半角スペースで区切られた複数の「姓名」データがあるなら、「姓」と「名」を抽出するのに Excel の「フラッシュフィル」機能を使うことで関数なしでも実現は可能です。
たとえば「姓名」データが縦に並んでいるとき、先頭のセルだけ右セルに「姓」、その右セルに「名」を入力あるいはコピペしたとします。
この状態で「B1」セルを選択すると右下に小さな四角い「オートフィル ハンドル」が現れます。
この「オートフィルハンドル」を「B5」までドラッグして、手を放すと「B2」から「B5」まですべてに「佐藤」が入力(コピー)されます。
※「オートフィルハンドル」をダブルクリックしても同じ結果です。
このとき「B5」の右下には「オートフィルオプション」アイコンが表示され、クリックすると選択肢が表示されるので「フラッシュフィル」を選択します。
これで「B2」から「B5」まで、左のセルの「姓名」データから「姓」が自動で抽出されます。
同様に「C1」セルを選択して「フラッシュフィル」を実行すれば「姓名」データから「名」が自動で抽出されます。
あるいは「C1」セルを選択した状態で「ホーム」タブのリボンで「編集」グループの「フィル」ボタンメニューから「フラッシュフィル」を選択、
もしくは「データ」タブのリボンにも「データツール」グループの中に「フラッシュフィル」ボタンでも実行できます。
覚えたらショートカットキー「Ctrl + E」が一番、簡単かもしれません。
逆に「姓」と「名」データが分かれて並んでいるとき、右隣りのセルに結合した「姓名」データを「フラッシュフィル」することも可能です。
理解を深めるための「パソコン用語解説」
記事の情報は公開時あるいは更新時のもので、最新情報はリンク先など情報元の公式ページでご確認ください。