1.前回までに、空白で分けられた氏名から、名字だけを動的にとりだす方法を説明しました。
A列の氏名から、空白文字の出現個所をFIND関数で取得しました。
B1セルに 以下のように関数を入力します。
=FIND(" ",A1)
すると、こうなります。
空白の出現個所が3文字目であることがB1セルに返されました。
B1セルの式を、B2~B4セルまでコピーしましょう。
この状態で、CtrlキーとDのキーを同時に押します。
式がコピーされて、A2~A4の氏名の空白の出現個所が返されました。
2.LEFT関数で名字を取得する。
LEFT関数は、文字列の左からスタートして、指定した文字数を取り出す関数でしたね。
では、C1セルに以下のように書いてみましょう。
=LEFT(A1,B1)
この式は、A1セルの文字列から、B1セルに入力されている数字ぶんだけの文字を取り出してください、という意味になります。
つまり、岸田 文雄 という文字列から 「岸田 」をとってきてしまいます。
これは、B1セルに入力しているFIND関数は「空白文字の出現個所」を表しているからです。
このままでは、空白文字も取得してしまいますので、以下のようにを書き換えます。
=LEFT(A1,B1-1)
すると、以下のようになります。
空白文字は目に見えないので、LEN関数という 「文字列の長さ」を取得する関数をD1セルに入力して、
C1セルの文字数を調べてみましょう。
=LEN(C1)
2文字ですね!
では、C1,D1セルを下にコピーしましょう!
C列に名字が、D列に名字の文字数が表示されましたね!
3.RIGHT関数で名前を取得する。
では仕上に空白文字より後の部分。つまり「名前」を取得しましょう。
RIGHT関数を使用すると、文字列の右端から任意の文字数を取得できます。
つまり、LEFT関数と同じ操作を反対側から行うことができるのです。
A列の氏名を右から数えて、空白文字の1つ右の文字までを取得すればよいので、
動的に文字数を指定するためには、以下のような式を立てればいいですね!
氏名の文字数 - (名字の文字数 + 空白文字の文字数)=名前の文字数。
氏名の文字数は、さきほどのLEN関数で取得できそうです。
名字+空白文字の文字数は、FIND関数で既にB列に取得していますね!
では、E列にLEN関数で氏名の文字数を取得してみましょう。
=LEN(A1)
E1セルに式を入力して、E4セルまでコピーしましょう。
空白文字を含めた氏名の文字数が取得できていますね。
では、F列には名前の文字数を取得するために、以下の式を入力しましょう。
これまで同様にF1セルに入力してからF4セルまでコピーしてください。
=E1-B1
仕上に、G列にRIGHT関数を入力します。
=RIGHT(A1,F1)
G1セルに式を入力して、G4セルまでコピーしましょう。
名前が取得できました!
念のため、名前の文字数を確認するためにH列にLEN関数を入力して調べてみます。
合ってますね!
4.まとめと次回予告
この方法を使うと、一定のルールで仕切られている文字列を自分の目的に従って分けることができます。
名簿に何千何万人の氏名が記載されていても、一瞬で名字と氏名を分けることができます。
郵便番号のハイフン 「-」や、住所を「市」の前後で分けたり、メールアドレスを「@」いろいろと使い道がありそうです。
ところが、実際に業務で遭遇するケースの1つにには「ゆらぎ」という難題があります。
それは、「同じように入力したつもりでも、ちょっとした誤りで別の文字列と認識してしまう」 問題です。
例えば、今回のように名字と名前を空白で分けて書いてくださいね、というルールを課していても、
空白文字を全角と半角、どちらで入力すればいいか決めておかないと、以下のようになってしまいます。
B列に入力したFIND関数は、全角の空白 ” “ の出現個所を探していたため、河野さんと五所川原さんの氏名を分けている半角の空白 ” “を見つけることが出来ずにエラーになってしまいました。
このままでは名簿が使い物になりません!
次回は、こうしたゆらぎに対応する方法について考えていきたいと思います。