今回は、住所から都道府県だけを抜き出す方法を紹介していこう。前回の連載で紹介した「区切り位置」を活用する方法も考えられなくはないが、通常は上手くいかない。少し複雑なデータ分割を行いたい場合は、文字列関数を使ってデータを抽出するのが一般的だ。

住所から都道府県を抜き出す手順

住所から都道府県を抜き出そうとしたときに、前回の連載で紹介した「区切り位置」を応用してデータ分割を試みる人もいるだろう。しかし、この方法は上手くいかない。というのも、山県市(岐阜県)や府中市(東京都)のように、地名に都・道・府・県の文字が含まれている場合もあるからだ。

たとえば「県」→「県★」の置換を行うと、「岐阜県山県市」は「岐阜県★山県★市」になっていしまい、「★」の文字で住所データを正しく分割できない。もちろん、「府」「都」「道」の文字についても同様の問題が生じる可能性がある。

  • 「県」→「県★」の置換を行うと…

    「県」→「県★」の置換を行うと…

  • このような結果に

    このような結果に

住所から都道府県を抜き出すときには、考え方を変えてデータ分割を行う必要がある。まず注目したいのが都道府県の文字数だ。都道府県の多くは、「東京都」や「愛知県」「北海道」のように3文字で表記される。例外は「神奈川県」「和歌山県」「鹿児島県」の3つ。これらの住所は、先頭から4文字目が必ず「県」なので、

  • 先頭から4文字目が「県」であるか

に応じて処理を変化させるのがポイントだ。つまり、以下のような手順で処理を行うと、都道府県の文字を正しく抜き出せる。

1.住所の先頭から4文字目が「県」であるかを調べる。
2.「県」の場合は、先頭から4文字を抜き出す。
3.「県」でなかった場合は、先頭から3文字を抜き出す。

このように「特定の文字」で区切ることができないデータは、何らかの法則性を見つけて処理していく必要がある。先ほどの例を具体的に紹介していこう。まずは、都道府県を抜き出すための列を用意する。

  • 「都道府県」の列を作成

    「都道府県」の列を作成

続いて、『先頭から4文字目が「県」であるか』の処理をIF分で記述していく。先頭から4文字目の文字を抽出するには、関数MIDを使用すればよい。

  • 関数MIDの書式
    MID(文字列,開始位置,文字数)

今回の例では、MID(C3,4,1)と記述すると「先頭から4文字目の文字」を抜き出せる。この文字が「県」であるかどうかで処理を分岐させるので、IF文の条件は「MID(C3,4,1)="県"」だ。

  • IF文の条件に『先頭から4文字目が「県」であるか』を指定

    IF文の条件に『先頭から4文字目が「県」であるか』を指定

4文字目が「県」であった場合は、先頭から4文字分を抜き出すと都道府県を抽出できる。この処理には関数LEFTを使用する。

  • 関数LEFTの書式
    LEFT(文字列,文字数)

今回の例の場合、IF文の「真の場合」の記述は「LEFT(C3,4)」だ。

  • 4文字目が「県」の場合の処理(先頭から4文字を抜き出す)

    4文字目が「県」の場合の処理(先頭から4文字を抜き出す)

最後に、4文字目が「県」でなかった場合の処理を記述。この場合は、先頭から3文字分を抜き出せばよいので、IF文の「偽の場合」は「LEFT(C3,3)」と記述する。

  • 4文字目が「県」でない場合の処理(先頭から3文字を抜き出す)

    4文字目が「県」でない場合の処理(先頭から3文字を抜き出す)

念のため、IF文全体の記述を以下に示しておこう。

=IF(MID(C3,4,1)="県",LEFT(C3,4),LEFT(C3,3))

以上で関数の入力は完了。「Enter」キーを押して入力を確定させると、都道府県が正しく抽出されているのを確認できるはずだ。

  • 都道府県を抽出した結果

    都道府県を抽出した結果

あとはオートフィルを使ってIF文をコピーしていくだけ。これで、すべての住所から都道府県を抜き出せる。

  • オートフィルでIF文をコピー

    オートフィルでIF文をコピー

  • 都道府県を抽出した表

    都道府県を抽出した表

都道府県以降の文字を抜き出す手順

続いては、都道府県より後の住所を抜き出す方法を紹介していこう。この作業は、以下のような考え方で処理できる。

  • 都道府県が3文字の場合は、先頭から4文字目以降の文字を抜き出す。
  • 都道府県が4文字の場合は、先頭から5文字目以降の文字を抜き出す。

ただし、Excelには「N文字目以降の文字を抜き出す」という関数が用意されていないことに注意しなければならない。よって、文字数を調べる関数LENを利用して処理を記述する。

  • 関数LENの書式
    LEN(文字列)

今回の場合、住所全体の文字数はLEN(C3)で調べることができる。同様に、都道府県の文字数はLEN(D3)で調べられる。

  • 都道府県を抽出した表

    都道府県を抽出した表

よって、「都道府県より後の住所」の文字数は、LEN(C3)-LEN(D3)で求められる。この文字数分だけ、住所データの末尾から文字を抽出すると、「都道府県より後の住所」を抜き出すことができる。この処理には関数RIGHTを使用する。

  • 関数RIGHTの書式
    RIGHT(文字列, 文字数)

つまり、関数RIGHTを使って、データの末尾から「LEN(C3)-LEN(D3)」の文字数だけ文字を抜き出せばよい。これを記述したのが次の関数だ。

=RIGHT(C3,LEN(C3)-LEN(D3))

  • 「都道府県より後の住所」を抜き出す関数の記述

    「都道府県より後の住所」を抜き出す関数の記述

あとはオートフィルを使って関数をコピーしていくだけ。これで、すべての住所を「都道府県」と「それ以降の住所」に分割することができる。

  • オートフィルで関数をコピー

    オートフィルで関数をコピー

  • 「それ以降の住所」を抽出した結果

    「それ以降の住所」を抽出した結果

最後に、表を見やすくするためにC列を非表示にしておこう。C列の列番号を右クリックして「非表示」を選択する。

  • C列を非表示する操作

    C列を非表示する操作

  • 「都道府県」と「それ以降の住所」だけを表示した表

    「都道府県」と「それ以降の住所」だけを表示した表

今回の例のように、データの分割は一筋縄にはいかない場合も多い。データの分割を自動処理するには「何らかの法則」を見つけ出して、適切な関数を記述する必要がある。少し難しい作業だが、データ処理の一例として頭に入れておくとよいだろう。

なお、非表示にしたC列を再表示したい場合は、B列からD列までをドラッグし、その後、右クリックメニューから「再表示」を選択すればよい。列の非表示/再表示に慣れていない方は、この機会に覚えておくとよいだろう。

  • C列を再表示する操作

    C列を再表示する操作