今回は、住所から都道府県だけを抜き出す方法を紹介していこう。前回の連載で紹介した「区切り位置」を活用する方法も考えられなくはないが、通常は上手くいかない。少し複雑なデータ分割を行いたい場合は、文字列関数を使ってデータを抽出するのが一般的だ。
住所から都道府県を抜き出す手順
住所から都道府県を抜き出そうとしたときに、前回の連載で紹介した「区切り位置」を応用してデータ分割を試みる人もいるだろう。しかし、この方法は上手くいかない。というのも、山県市(岐阜県)や府中市(東京都)のように、地名に都・道・府・県の文字が含まれている場合もあるからだ。
たとえば「県」→「県★」の置換を行うと、「岐阜県山県市」は「岐阜県★山県★市」になっていしまい、「★」の文字で住所データを正しく分割できない。もちろん、「府」「都」「道」の文字についても同様の問題が生じる可能性がある。
住所から都道府県を抜き出すときには、考え方を変えてデータ分割を行う必要がある。まず注目したいのが都道府県の文字数だ。都道府県の多くは、「東京都」や「愛知県」「北海道」のように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)="県"」だ。
4文字目が「県」であった場合は、先頭から4文字分を抜き出すと都道府県を抽出できる。この処理には関数LEFTを使用する。
- 関数LEFTの書式
LEFT(文字列,文字数)
今回の例の場合、IF文の「真の場合」の記述は「LEFT(C3,4)」だ。
最後に、4文字目が「県」でなかった場合の処理を記述。この場合は、先頭から3文字分を抜き出せばよいので、IF文の「偽の場合」は「LEFT(C3,3)」と記述する。
念のため、IF文全体の記述を以下に示しておこう。
=IF(MID(C3,4,1)="県",LEFT(C3,4),LEFT(C3,3))
以上で関数の入力は完了。「Enter」キーを押して入力を確定させると、都道府県が正しく抽出されているのを確認できるはずだ。
あとはオートフィルを使って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列を再表示したい場合は、B列からD列までをドラッグし、その後、右クリックメニューから「再表示」を選択すればよい。列の非表示/再表示に慣れていない方は、この機会に覚えておくとよいだろう。