9/02/2021

Excel。氏名を苗字で分割したいが区切りがないので困っています。【String split】

Excel。氏名を苗字で分割したいが区切りがないので困っています。

<LEFT&SUBSTITUTE関数 LEN&RIGHT関数>

データを読み込んでみたら、次のようになっていました。


氏名フィールドのデータを姓フィールドと名フィールドに分割して管理したいのですが、氏名フィールドのデータには、半角や全角の空白などもありません。


区切る場所がわからないので、簡単にわけることができません。


データタブの「フラッシュフィル」をつかったところで、区切るポイントがExcel側としても判断できないので、処理はできません。


Excel VBAでプログラムならばと考えても、区切る位置がわからないので、自動的に区切ることができません。


要するに、このようなデータを分割するには、区切りになる場所は、自分自身で用意しなければいけないわけです。


そこで、氏名フィールドのデータに区切り位置を表す、半角や全角のスペースを入力し修正するのは、面倒です。


そこで、別の列。

今回は、F列に、区切り位置の数値を用意します。


C列の姓フィールドを算出していきます。

C2には、

=LEFT(A2,F2)

と数式を設定したら、オートフィル機能をつかって、数式をコピーします。


これで、姓フィールドが算出することができました。


続いて、名フィールドの算出方法ですが、SUBSTITUTE関数をつかうと、別の列に色々算出しないで、スマートに名フィールドに、名前を算出することができます。


D2に次の数式を設定します。

=SUBSTITUTE(A2,C2,"")

数式をコピーします。


これで、名フィールドに名前を抽出することができました。


SUBSTITUTE関数をつかうと、なぜ、名前を抽出することができたのかを確認していきます。


SUBSTITUTE関数は、指定した文字列を置換することができる関数です。


SUBSTITUTE関数の引数は、

SUBSTITUTE(文字列,検索文字列,置換文字列,[置換対象])

となっています。


文字列には、A2。「伊藤博文」という文字が対象です。

検索文字列には、C2。先程算出した、苗字を検索するわけです。

置換文字列には、「””」。「””」は空白という意味なので、苗字のところを空白に置換することができます。

苗字が空白になるので、残ったのが名前という仕組みです。


SUBSTITUTE関数は、色々使える重宝な関数です。


また、手順は増えてしまいますが、SUBSTITUTE関数を使う方法以外にも、RIGHT関数を使う方法もあります。


氏名フィールドの文字数をLEN関数で算出して、その数値を、F列の区切り位置の数値を減算すると、名前の文字数が算出できます。

あとは、算出結果をつかってRIGHT関数で名前を抽出する方法もあります。


Excelのデータは、分割よりも結合するほうが、簡単なので、できれば、最初から、姓と名を分けておくことをおススメします。