空白で区切られた名前の文字列から姓と名を取得する(LEFT,RIGHT,FIND,LEN)
姓と名が空白で区切られて入力されている文字列から姓と名をそれぞれ取り出す方法です。空白文字の位置を取得したあと空白よりも前の部分と後の部分をそれぞれ取り出します。ここでは Excel の関数である LEFT 関数、 RIGHT 関数、 FIND 関数、 LEN 関数を組み合わせて、姓と名が空白で区切られた文字列から姓と名をそれぞれ取得する方法について解説します。
(Last modified: )
名前の文字列から姓と名をそれぞれ取り出す
姓と名が空白で区切られている文字列から姓と名の部分をそれぞれ取得する方法です。次のシートを見てください。
対象の文字列には名前の値が入力されており、姓と名の間は半角スペースで区切りられています。最初に姓の部分を取得するために C3 セルに次のような数式を入力しました。
=LEFT(B3, FIND(" ",B3,1)-1)
FIND
関数を使って対象の文字列の中にある半角スペースの位置を取得し、 LEFT
関数を使って対象の文字列の先頭位置から (半角スペースの位置)-1 分だけ取得します。
Enter
キーを押すと C10 セルには次のように表示されました。
次に名の部分を取得するために D3 セルに次のような数式を入力しました。
=RIGHT(B3,LEN(B3)-FIND(" ",B3,1))
FIND
関数を使って対象の文字列の中にある半角スペースの位置を取得し、 RIGHT
関数を使って対象の文字列の末尾から (文字列の文字数)-(半角スペースまでの文字数) 分だけを取得します。
Enter
キーを押すと D3 セルには次のように表示されました。
C4 セルから D6 セルまで同じように数式を入力しました。
対象の名前が入力された文字列から姓と名の部分をそれぞれ取得することができました。
解説
姓と名のどちらを取得する場合も、まず FIND(" ",B3,1)
を使って半角スペースの位置を取得しています。実際にどのような数値を取得しているのかは次をみてください。
例えば "山田 太郎" の場合、半角スペースの位置は 3 文字目になります。そこで姓の部分は先頭から 3-1=2 文字分を取得し、名の部分は末尾から文字の長さである 5 から半角スペースがある 3 を引いた 5-3=2 文字分を取得すればいいことになります。
今回使用した関数の解説は下記を参照されてください。
・LEFT関数:左端から指定した文字数だけ文字列を取得する
・RIGHT関数:右端から指定した文字数だけ文字列を取得する
・FIND関数:指定の文字が何文字目にあるかを検索する
・LEN関数:文字数の長さ(文字数)を取得する
連続したスペースや全角スペースが混じっている場合
先ほどは姓と名の間が半角スペース一文字で区切られている前提で数式を記述していましたが、半角スペースが複数連続で使われている場合や全角スペースが含まれている可能性がある場合には先に半角スペースに統一した上で連続するスペースを一つにまとめる処理をしたあとの文字列を対象にする必要があります。
次のシートを見てください。
B3 セルでは 2 つの半角スペースが区切り文字として使用されており、 B4 セルでは全角スペースが区切り文字として使用されています。また B6 セルでは半角スペース 1 つと全角スペース 1 つが区切り文字として使用されています。このような状態で先ほどの数式を使用すると、正しく姓と名が取得できなかったりエラーになったりします。
そこで連続したスペースや全角スペースが混じっている可能性がある場合には、まず姓の方の数式として次のように入力してください。
=LEFT(TRIM(SUBSTITUTE(B3," "," ")), FIND(" ",TRIM(SUBSTITUTE(B3," "," ")),1)-1)
対象の文字列として B3 セルを指定していたところに代わりに TRIM(SUBSTITUTE(B3," "," "))
を指定しています。
C3 セルから C6 セルまで同じ数式を入力してみるとそれぞれ次のように表示されました。
次に名の方の数式として次のように入力してください。
=RIGHT(TRIM(SUBSTITUTE(B3," "," ")),LEN(TRIM(SUBSTITUTE(B3," "," ")))-FIND(" ",TRIM(SUBSTITUTE(B3," "," ")),1))
姓の場合と同じく対象の文字列として B3 セルを指定していたところに代わりに TRIM(SUBSTITUTE(B3," "," "))
を指定しています。
D3 セルから D6 セルまで同じ数式を入力してみるとそれぞれ次のように表示されました。
姓と名の区切りにスペースが連続していたり全角スペースが混じっていても姓と名をそれぞれ取得することができました。
解説
区切り文字にスペースが連続していたり全角スペースが混じっている場合、最初に全角スペースを半角スペースにすべて置換したあとで複数のスペースが連続している場合は 1 つにまとめています。これを行っているのが TRIM(SUBSTITUTE(B3," "," "))
になります。
この処理について詳しくは「文字列の中にある全角スペースを半角スペースに置換する(SUBSTITUTE,TRIM)」を参照されてください。
対象の文字列に TRIM(SUBSTITUTE(B3," "," "))
を行うとどのような結果になるのかは次を見てください。
このようにして区切り文字を半角スペース 1 文字に統一してから姓と名をそれぞれ取り出しています。
-- --
Excel の関数である LEFT 関数、 RIGHT 関数、 FIND 関数、 LEN 関数を組み合わせて、姓と名が空白で区切られた文字列から姓と名をそれぞれ取得する方法について解説しました。
( Written by Tatsuo Ikura )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。