エクセルで市町村を抽出する方法とは?

住所データから市町村名を抽出するエクセル関数を紹介!

住所データから市町村名を抽出するエクセル関数を紹介

住所データから都道府県名を取り出す方法」で、住所データから県名を取り出す関数の組み合わせ技を紹介しました。この記事では、県名以外の住所データから「市区町村郡名」を取り出す関数の組み合わせ技を紹介します。FIND関数やLEFT関数を中心とした組み合わせ技で、「政令都市の市区、郡と町村をまとめて取り出すパターン」「市郡名だけを取り出すパターン」に挑戦します。

まず、「住所データから都道府県名を取り出す方法」で紹介した方法で、都道府県名を取り出しておき、SUBSTITUTE関数を使用して、市区町村郡以降の部分を「作業用データ」として取り出しておきます。この作業用データから、市区町村郡名や番地などのデータを取り出します。


作業用データを見てみると、市区名がある場合や、郡に続けて町村名がある場合などがあります。また、政令指定都市の場合は、市名のあとに区名があります。このように、市区町村郡名の取り出しは、都道府県名を取り出す場合と違い、様々なパターンがあるのが特徴です。


このような特徴を持つ市区町村郡名を取り出すため、今回は、基本的な方法として、
FIND関数を使用して住所の先頭から「市」の文字を探し、見つかったら、先頭からそこまでの文字列を取り出す」
「見つからなかったら「区」を探し、見つかったらそこまでの文字列を取り出す」
といった作業を「市」「区」「町」「村」「郡」ごとに繰り返し実行する方法をとります。
 

市町村が抽出エラーになった場合の対処法とは?


しかし、「市川市」や「町田市」「郡山市」「大町町」といったように、市区町村郡名が「市」「区」「町」「村」「郡」の文字を含む場合、正確に取り出せない場合があります。
※上図では「郡上市」が正確に取り出せていますが、別な組み方だと正確に取れない場合があります。


関数の組み方によっては、こういったエラーが発生する市区町村郡名も正確に取り出すことができますが、ご承知のとおり、市区町村郡名は変更されることがあります。変更のたびに関数の組み方を修正するのも手間ですし、Excel2003までのバージョンでは、入れ子にできる関数の数に制限があるため限界があります。極端に言うと、ExcelではVBAプログラムなどを作成しない限り、万全のしくみを作成することは難しいでしょう。

しかし、今回紹介する方法の場合、「市」「区」「町」「村」「郡」の「検索順番」によって、このようなエラーの発生頻度を減らすことができます。

そこで、ここでは「エラーの発生頻度が少ない検索順番」と「発生するエラー」を紹介します。なるべく関数作成に手間をかけずにエラーの発生頻度を抑え、発生するエラーを明確にしておくことでエラーパターンに対処しよう、という考え方です。
 

政令都市の「市区郡町村」をまとめて抽出しよう!


数式の作成方法を解説するために、まずは、政令都市の市区、郡と町村をまとめて取り出すパターンを作成してみましょう。


このパターンでは、「区→町→市→村」の順番で検索すると、エラーの発生を最小にすることができます。なお、取り出す部分が「郡」で終わる場合はないので、「郡」の検索は行っていません。
 

市町村を抽出する「関数の組み合わせ方法」とは?


「区」という文字を検索し、見つかったら、住所の先頭からその文字位置までの文字列を取り出す数式を作成してみましょう。文字の検索はFIND関数、文字列の取り出しはLEFT関数を使用します。


上図の数式で区名を取り出すことができますが、「区」が見つからないとFIND関数は「#VALUE!」を返し、エラーとなってしまいます。そこで、「ISERROR関数」の登場です。ISERROR関数は、引数に指定した数式がエラーとなるかどうかを判断する大変便利な関数です。


数式がエラーとならない場合、ISERROR関数はFALSEを返します。これとIF関数を利用して、「引数にFIND関数の数式を指定したISERROR関数」がFALSEの場合だけ、LEFT関数による文字列の取り出しを行うように数式を作成します。


この数式が基本となり、あとは、検索する回数分だけ入れ子になっていきます。
 

追加で使える「関数の組み合わせ」も紹介!

「区」の文字が見つからなかったら、次は「町」の文字を検索して取り出す、というように、2つ目の数式を入れ子の形で記述します。数式末尾の閉じカッコが増えていくので注意してください。
※説明図の表示サイズの制限上、上図では改行して表示していますが、実際は1行で記述します。


3つ目以降も同じように記述していきます。
※説明図の表示サイズの制限上、上図では改行して表示していますが、実際は1行で記述します。


こうして、「区→町→市→村」の順番に文字を検索する数式を完成させます。なお、通常であれば「どの文字も見つからない」ということはありませんが、住所の入力ミスも考えられるので、ここでは、最後まで見つからなかった場合に「エラー」という文字を表示させることにします。
※説明図の表示サイズの制限上、上図では改行して表示していますが、実際は1行で記述します。


市区町村名以降の番地などの部分はSUBSTITUTE関数を使用して取り出します。

 

政令都市「市区郡・町村」が抽出エラーになる場合の例


政令都市の市区、郡と町村をまとめて取り出すパターンで、「区→町→市→村」の順番に検索したときにエラーとなる市区町村郡名は次の11件です。これらの住所データの対処方法については、次の機会に紹介します。
※2008年11月現在の住所データを使用して検証しています
 

住所データから「市郡」だけを抽出するには?


2つ目のパターンは、市郡名だけを取り出すパターンです。この場合は、「郡→市→区→町→村」の順番で検索すると、エラーの発生を最小にすることができます。市郡名だけを取り出すのに、区町村も含めているのは、東京都に区町村名だけの住所があるためです。


入力する数式は次のようになります。


エラーとなる市区町村郡名は次の9件です。
※2008年11月現在の住所データを使用して検証しています
 

住所データから「区町村」だけを抽出する方法はこれ!


なお、市郡名だけを取り出すパターンの結果から区町村を取り出すこともできます。


この場合、市郡名だけを取り出したあと、町村・番地などのデータを「作業用データ2」として取り出します。


区町村名は、この「作業用データ2」から取り出します。この場合、「区→町→村」の順番で検索すると、エラーの発生を最小にすることができます。なお、区町村名がない場合もあるので、すべて検索されなかった場合は「""(長さ0の文字列)」を表示します。


エラーとなる市区町村郡名は2件増えて、合計11件となります。
※2008年11月現在の住所データを使用して検証しています
【関連記事】

※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。