Excelで住所から市名を分割する方法【DM・宛名シールなどの印字の準備のために】
はじめに
関数で一括で郡市区町村名を取り出すのに苦労することが多いこの問題、以前取り上げた都道府県名を住所から抜き出した後、郡名と特別区を取り出しました。上記のやり方で順次、「市」「町」「村」を随時LEFT関数を用いて取り出していきます。
そもそもこの問題の根本は、「郡」「市」「区」「町」「村」が入っている郡市区町村名および地域名があることです。
例えば、市名では「郡山市」「市川市」「村上市」「町田市」など、地域名では「郡山」「市谷」など。
「郡」「区」「市」「町」「村」の前にこれらがあると、そこで止まって中途半端な抜き出しになってしまうのです。
例えば「郡山市●●1丁目23-45」のばあい、「郡山市」を抜き出したいのに先頭の「郡」で止まってしまい、「郡」だけしか抜き出すことが出来ないのです。
ですが、一括でするのではなく、「郡」「区」「市」「町」「村」の順で随時取り出すという方法ならば、郡市区町村名に「郡」「区」「市」「町」「村」があるかどうかを確認しつつ、抜き出せるのです。
では引き続き、その方法を紹介いたします。
因みに、都道府県名と郡名や特別区名を抽出した結果は以下の通り。区市町村以下も関数でG列に表示しています。
目次
市名を調べる
都道府県名都郡名および市名を取り出したので、市名は住所の最初から何文字かまでになります。COUNTIF関数で「市」がn文字目にある時、LEFT関数でn文字取り出せば良いことになります。
最初に、全ての市名を収集します。
市名一覧は次の通り。
次に、市名内に「市」が使用されていたら市名を抜き出すのが難しくなるので、市内に「市」が使用されているかどうかを、前記の「市名一覧」で調べます。
市名内に「市」が使用されているかどうかを調べる関数は以下の通り。
=IF(COUNTIF(G2,"*市*市*"),"YES","")
市名に「市」が2文字以上ある場合は「YES」を表示し、1文字の場合は何も表示しない、という関数です。
「市名一覧」にこの関数を挿入し調べた結果、「市」が2文字以上ある市名は、
- 市川市
- 市原市
- 野々市市
- 四日市市
- 廿日市市
の5市ありました。
それから最後に、市名の文字数と「市」の来る位置を調べた結果、市名の文字数は、2〜7文字。「市」の来る位置も2〜7文字目。
以上の結果をまとめると、
市名に「市」が2文字使用の市が5市ある
市名の文字数は、2〜7文字
「市」の来る位置も2〜7文字目
住所から市名を抜き出すのに、文字数の順序を考慮する必要があります。
住所から市名を抜き取る
では住所から市名を抜き出します。先に、市名の文字数の順序を考慮する必要があります。
市名に「市」が2文字ある市が5市ありました。
- 市川市
- 市原市
- 野々市市
- 四日市市
- 廿日市市
文字数の少ない順から市名を抜き出すと、3文字市名の時、「野々市市」「四日市市」「廿日市市」が「野々市」「四日市」「廿日市」という風に取り出されてしまいます。
IF関数やIFS関数は、条件を書いた順に処理をしていくので、今回は逆に文字数の多い順に市名を抜き出していきます。
最初は、7文字の市名を抜き出します。
7文字の市名を検索するには、COUNTIF関数を使用して以下の通りになります。
=COUNTIF(G2,"??????市*")
「??????市*」の意味は、「?」が任意の1文字、次に「市」が来て、「*」は任意の文字列(1文字以上)なので、「7文字の市とそれ以外の1文字以上の文字列」となります。
それから、7文字の市名を抜き出すには、LEFT関数を使用して以下の通りになります。
=LEFT(G2,7)
次に、6文字の市名を抜き出します。
COUNTIF関数を使用して以下の通りになります。
=COUNTIF(G2,"?????市*")
「?????市*」では、任意の1文字「?」が2つ連続で次に「市」が来るので、「6文字の市とそれ以外の1文字以上の文字列」となります。
それから、6文字の市名を抜き出すには、LEFT関数を使用して以下の通りになります。
=LEFT(G2,6)
以下同様に、5文字から2文字の市名は
=COUNTIF(G2,"????市*")
=LEFT(G2,5)
=COUNTIF(G2,"???市*")
=LEFT(G2,4)
=COUNTIF(G2,"??市*")
=LEFT(G2,3)
=COUNTIF(G2,"?市*")
=LEFT(G2,2)
となります。
関数を一つにまとめる―IF関数またはIFS関数で
では、市名を住所から抜き出す関数を、IF関数またはIFS関数でまとめます。IF関数またはIFS関数を使用するには、「条件」と「処理」のペアが必要です。
「条件」は何でしょうか?
それは、前項でのCOUNTIF関数を指します。
また、「処理」は何でしょうか?
それは、前項でのLEFT関数になります。
つまり、7文字の市名を抜き出すには、
もし都道府県名と郡名や特別区名を抜き出した後の住所が「7文字の市とそれ以外の1文字以上の文字列」ならば、住所の先頭(左端)から7文字取り出す。
となります。
これを関数で表すと、以下の通りになります。
=IF(COUNTIF(G2,"??????市*"),LEFT(G2,7),●)…A
以下、6〜2文字の郡名を抜き出す関数は以下の通り。
=IF(COUNTIF(G2,"?????市*"),LEFT(G2,6),▲)…B
=IF(COUNTIF(G2,"????市*"),LEFT(G2,5),■)…C
=IF(COUNTIF(G2,"???市*"),LEFT(G2,4),◆)…D
=IF(COUNTIF(G2,"??市*"),LEFT(G2,3),▼)…E
=IF(COUNTIF(G2,"?市*"),LEFT(G2,2),◎)…F
これらを一つにまとめるには、上記Aの●にBを挿入し、Bの▲にCを挿入します(以下同様)。
Fの◎には、該当しない場合は空欄になるように「""」を挿入します。
結果は以下の通り。
=IF(COUNTIF(G2,"??????市*"),LEFT(G2,7),IF(COUNTIF(G2,"?????市*"),LEFT(G2,6),IF(COUNTIF(G2,"????市*"),LEFT(G2,5),IF(COUNTIF(G2,"???市*"),LEFT(G2,4),IF(COUNTIF(G2,"??市*"),LEFT(G2,3),IF(COUNTIF(G2,"?市*"),LEFT(G2,2),""))))))
IFS関数を使用すると、IF関数のように入れ子状にする必要はなく、並列に羅列することが出来ます。
=IFS(COUNTIF(G2,"??????市*"),LEFT(G2,7),COUNTIF(G2,"?????市*"),LEFT(G2,6),COUNTIF(G2,"????市*"),LEFT(G2,5),COUNTIF(G2,"???市*"),LEFT(G2,4),COUNTIF(G2,"??市*"),LEFT(G2,3),COUNTIF(G2,"?市*"),LEFT(G2,2))
コメント
コメントを投稿