エクセル関数 住所から都道府県名だけを抜き出す方法は?
2019/11/21
くまです、こんにちは
お仕事でエクセルを使っていると、
「顧客名簿など、住所録の住所から都道府県だけを抜き出したい。」
「住所から都道府県名だけを抜き出すにはどうしたらいいのでしょう?」
という質問を受けることが良くあります。
「できるだけ簡単にできる方法でVBAなどを使わずに済む方法を教えてほしい・・」
そんなご要望にお応えして、簡単かつシンプルにできる方法をご紹介します。
都道府県を取り出すには
まず基本的なところから。
エクセルで文字列を抜き出すには”LEFT,MID,RIGHT関数”を使います。
LEFTを例に説明しましょう。
LEFT関数の構文は
=LEFT(文字列,[文字数])です。
図を見ていただけると分かりますが、
これだと3文字の都道府県はきれいに抜き取れますが。
“神奈川県”、”和歌山県”、”鹿児島県”などの4文字の県は「県」の文字が切れてしまっています。
FIND関数と組み合わせる
“FIND関数”とは文字列から特定の文字を検索して何番目の文字かを教えてくれる関数です。
FIND関数の構文は
=FIND(“検索文字列”,[対象],[開始位置](省略可)です。
ここでは検索文字列を”県”としてみましょう。
対象文字データの中で、「県」を含む場合、何番目かを教えてくれます。
図のように、該当する文字列が無い場合は、”#VALUE!”と表示されエラーになりますが、
該当する文字列がある場合は、その文字が左から数えて何番目かを教えてくれます。
“3”か”4”の数字が表示されていますね、神奈川県の場合、左から4番目ということです。
図で言うと、2行目のデータ、県は4文字目にあります。
でも、都道府県は、都、道、府、県、の4種類の文字をそれぞれ探さないといけません。
その場合はどうすればいいでしょう?
それは行列の考え方を関数に組み込むことで可能になります。
その方法は条件に{}を使います
かっこの形が少し違いますね。
=FIND({“都”,”道”,”府”,”県”},B3)
ところが、この数式を単体で使うと一番左の文字、ここでは”都”を含む場合以外はエラーになってしまいます。
これを回避するには、この計算式を”COUNT関数”と組み合わせることで可能になります。
なぜそうなるか、はそういう物だと思ってください。
COUNT関数は、範囲内の数値の数を数える関数です。
通常は=COUNT(数値1,数値2・・・)又は=COUNT(範囲)を指定します。
具体的に数式に組み込むには
=(COUNT(FIND({“都”,”道”,”府”,”県”},B3)))とします。
結果は対象文字列”B3″のなかに、行列で指定した条件に一致する文字の数を教えてくれます。
図でみると分かりやすいですね。
ここまででやったことは、住所データの中に、都、道、府、県の各文字が含まれるかの判定です。
結果が0より大きければ指定した文字列を含む=都道府県のいずれかである、ということが分かります。
ちなみに、外国の国名を入れた場合は結果は図の通り、0となります。
都道府県の文字数はどう判断する?
さて、ここから都道府県名を抜き出す関数へと進化させるわけですが、
都道府県名には、ある法則というか、特徴があります。
それは、3文字または4文字であるということです。
47都道府県のうち、4文字の都道府県は
「神奈川県」、「和歌山県」、「鹿児島県」の3つだけです。
全て、県なので都合が良いですね。
つまり、住所のデータの4文字目を抜き出したときに、その文字が「県」であれば
上記3つの県のいずれかであって、それは4文字だということですので、
それを計算式に組み込んでいきます。
4文字目を抜き出すには”MID関数”を使います。
MID関数は、文字列の中ほどにある文字を指定文字数分抜き出す関数です。
MID関数の構文は
=MID(対象文字列,開始位置,文字数)です
図で見る通り、結果に「県」が表示されているのは神奈川県と和歌山県だけですね。
そして結果が「県」であるかどうかの判定には”IF関数”を使います。
IF関数は、条件に一致する場合と一致しない場合にそれぞれの結果を反映させる関数です。
「条件に一致する」というのを「真の結果」と呼びます
「条件に一致しない」というのは「偽の結果」と呼びます。
IF関数の構文は
=IF(条件(論理式),一致する場合の結果(真の場合),一致しない場合の結果(偽の場合))
先ほどの図に加えた形で見てみましょう。
ご覧のように神奈川県と和歌山県は「4文字」でそれ以外は「3文字?」となっています。
だいぶ複雑になってきましたが、大丈夫ですか^-^?
上の図では、結果をそれぞれ「4文字」か「3文字?」であらわしていますが、
欲しい結果は都道府県名なので、それぞれの文字数を抜き出す関数に置き換えます。
同時に、4文字目の判定も数式に組み込みます。
こんな数式になります。
=IF(MID(B3, 4, 1)=”県”, LEFT(B3, 4), LEFT(B3, 3))
図で見てみましょう。
これでほぼ問題ありませんが、最後のシンガポールだけはおかしいですね。
都道府県を含まない文字列を全部表示する
これを解決するには、先ほど説明したCOUNT関数を組み込みます。
説明よりも図を見てみましょう。
=IF(COUNT(FIND({“都”,”道”,”府”,”県”},B3))>0,IF(MID(B3, 4, 1)=”県”, LEFT(B3, 4), LEFT(B3, 3)),B3)
だいぶん長い数式になりましたが、丁寧に中身をみていくと
IF関数の中に先ほど説明した全ての関数が並んでいることが分かると思います。
簡単に説明すると。
もし、文字列の中に「都、道、府、県」のいずれかの文字が含まれていたら、
4文字目を抜き出し、その結果が「県」であったら、文字列の左から4文字抜き出します。
4文字目の結果が「県」でない場合は、文字列の左から3文字抜き出します。
文字列の中に「都、道、府、県」が含まれない場合は、
文字列をそのまま表示します。
という二つのIF文でできています。
このように関数の中で別の関数を使用することをネストするなんて言ったりします。(巣の中に卵が入っている様子から来た”入れ子”の意です。)
国内の住所だけで良い場合
もし、外国の名称などが必要ない場合は、
=IF(MID(B3, 4, 1)=”県”, LEFT(B3, 4), LEFT(B3, 3))
これだけで十分です。
このように、基本的な関数に少し工夫してを組み合わせるだけで、複雑な条件をひとつの数式で満たすことが出来ます。
少し難しい部分もあったかもしれませんし、この他のやり方もありますので見つけてみてください^^♪