Excelで住所録を扱っていると、
「住所の中から都道府県名だけを取り出したい」
という場面は意外と多くあります。
たとえば、
・顧客データを都道府県別に集計したい
・地域ごとの件数をカウントしたい
・住所を分解して別の列に整理したい
こうした作業では、
住所全体ではなく 都道府県名だけを抽出できると非常に便利 です。
しかし、住所は文字列データのため、
単純にLEFT関数だけではうまくいかないケースがあります。
エクセルで住所録を作成し都道府県名だけを取り出したい時の方法の紹介です。
都道府県名は「3文字」と「4文字」がある
ここで重要なのが、
都道府県名の文字数のルール です。
・「都」「道」「府」 → すべて3文字
・「県」 → 4文字
都道府県の文字数は4文字か3文字のどちらかです。都道府はすべて3文字です。
つまり、4文字目が「県」ならば先頭4文字を、そうでなければ先頭3文字を取り出せば都道府県名を得ることが出来ます。
この判定に使うのが MID関数、
取り出し処理に使うのが LEFT関数、
そして条件分岐を行う IF関数 です。
4文字目が「県」かどうかを調べる
住所の先頭から4文字目を見て、
それが「県」なら都道府県名は4文字、
「県」でなければ3文字、と考えます。
この「4文字目を確認する」処理に
MID関数を使います。
MID関数は、
指定した位置から指定した文字数を取り出す関数です。
例:
MID(B3,4,1)
これは
「B3セルの4文字目から1文字を取り出す」
という意味になります。
MID関数で「県」かどうかを判定する
対象セルの開始位置から4文字目からの1文字が「県」なのかを判定します。
MID(B3,4,1)=”県”
この式は、
4文字目が「県」なら TRUE(真)、
それ以外なら FALSE(偽) を返します。
サンプルのセルB3の4文字目は「札」なので判定は「FALSE(偽)」になります。
開始位置から文字数で指定した数だけ文字を取り出します。
IF関数とLEFT関数で都道府県名を取り出す
この方法なら、1つの数式で全都道府県に対応できます。
IF関数で、真なら先頭4文字を、偽なら先頭3文字をLEFT関数で取り出します。
判定結果に応じて、
LEFT関数で取り出す文字数を切り替えます。
・TRUE(真)(県の場合) → 先頭4文字
・FALSE(偽)(都・道・府の場合) → 先頭3文字
関数例:
LEFT(B3,3)
LEFT関数は、指定セルの左端から2文字、3文字など指定の文字数を取り出します。
=IF(FALSE,LEFT(B3,4),LEFT(B3,3))
IF関数は指定セルの値が条件を満たす場合と満たさない場合に、それぞれ違う値を返します。
上のサンプルでは、4文字目が「県」でないため FALSE(偽)となり、LEFT(B3,3) が実行されます。
これを IF 関数でまとめると、次のような式になります。
=IF(MID(B3,4,1)=”県”,LEFT(B3,4),LEFT(B3,3))
※この数式は、そのままコピーして使えます。
【使い方の例】
・住所が入っているセル:B3
・結果を表示するセル:別の列(例:C4)
例として、4行目の住所データを処理する場合、
この数式を 4行目の別の列(例:C4)に入力してください。
住所セルが B4 の場合は、
数式内の「B3」を「B4」に置き換えて使います。
このように、数式を別の列に入力し、
住所セルだけを変更すれば、
住所データから都道府県名だけを抽出できます。
実例で確認する
例として、
・「北海道札幌市…」
→ 4文字目は「札」なので FALSE(偽)
→ LEFT(B3,3)
→ 「北海道」

サンプルのB3セルの北海道ではMID関数で4文字目が「札」ですので「FALSE」=偽です。LEFT(B3,3)「北海道」が取り出されます。
・「神奈川県横浜市…」
→ 4文字目は「県」なので TRUE(真)
→ LEFT(B6,4)
→ 「神奈川県」

B6セルでは4文字目は「県」です。「TRUE」=真なのでLEFT(B6,4)ですので下記のサンプルでは、「神奈川県」が取り出されます。
このように、
1つの数式で全都道府県に対応 できます。
この方法が役立つ場面
このテクニックは、
・住所録の整理
・顧客データの地域集計
・CSVデータの前処理
・都道府県別の集計・分析
など、実務でもよく使われます。
文字列処理の基本的な考え方としても、
MID関数+IF関数の組み合わせは
他の応用にもそのまま使えます。
おわりに
住所から都道府県名を取り出すポイントは、
・都道府県名の文字数ルールを知る
・条件分岐で処理を切り替える
この2点です。
MID関数で判定し、
IF関数とLEFT関数で取り出す。
この考え方を覚えておくと、
Excelの文字列処理が一段と楽になります。

