住所を都道府県、市区町村、それ以降に分割する仕組みを用意しました!
よく問題にあがる市川市とか野々市市にも対応済のほか、郡山市など郡ありの市町村にも対応できたエクセルファイルができたので、すぐに使えるようにファイルを公開します。
特徴
ここで公開している仕組みの特徴は下記のとおり。
- 関数のみ、マクロ無し
- 実在しない自治体をあぶり出せる
- 市川市など、市区町村という単語の重複にも対応
- 栃木県芳賀郡市貝町など、郡があっても省略されてても大丈夫
- 政令指定都市は、市で区切られます(札幌市中央区は札幌市となる)
- 三宅島三宅村のような島までは対応できていません
- 檮原町・梼原町のように表記が複数ある場合は総務省データにある方の字でしか対応できません
これらを見て、あー使えるかもって思われましたら、進んでください。
把握している非対応の自治体は以下の4カ所。ほかにあれば教えてもらえると幸いです。
- 福岡県須惠町(須恵町)
- 高知県檮原町(梼原町)
- 東京都八丈島八丈町
- 東京都三宅島三宅村
件数は少ないので、総務省からのデータをちょっと小細工するなどで対応されることをお勧めします。
ファイルはこちら
式が長いわ3段階も踏んで処理するわでややこしい作りになってしまったので、今回はやり方の紹介ではなく、できた仕組み(エクセルファイル)を公開します。
住所分割エクセルファイル(ZIP圧縮ファイル)
https://excelkowaza.com/wp-content/uploads/2023/01/jusyo-bunkatu.zip
いちおう直感で扱えるようにはしたつもりです。
住所列に分割したい住所をコピペなどでもってきて、そこより右のセルは式が組まれているので、オートフィルで最終行まで反映させるだけで使えます。
詳しい使い方の説明は次で。
使い方
今回用意した住所分割エクセルの使いかたです。
市区町村一覧の更新
市区町村の一覧を用意します。が、めったこ更新される事はないので、必要なら更新してください。
現在、2023/1時点での最新版を使用していますが、それ以降で反映させたい変更点などが出てきたら更新、必要なければここ(総務省からエクセルファイルを拝借~都道府県と市区町村を合体)は読み飛ばして大丈夫です。
最終的にF列に、北海道札幌市のように、都道府県名と市区町村名がくっついたデータがあればOKです。
また、更新した場合はシート名を現在の団体にするか、使い方シートにあるシート名セルの内容を編集してください。
総務省からエクセルファイルを拝借
総務省ホームページから、全国地方公共団体コードのエクセルファイルをダウンロードします。
総務省|電子自治体|全国地方公共団体コード (soumu.go.jp)
現在の団体シートをコピー
全国地方公共団体コードのエクセルファイルから、現在の団体シートをコピー、または移動で持ってきます。
都道府県と市区町村を合体
現在の団体シートで、都道府県と市区町村を合体させておく。
今回は、F2に=B2&C2と式を入れ、オートフィルで最終行まで反映させます。
分割したい住所を用意
住所分割シートの住所列(B列)に、分割したい住所データをもってきます。
氏名列(A列)は自由枠なので、何をいれてもいいし、何もいれなくてもいいです。
式を最終行まで反映
C4(第一作業)~H4(市区町村の後ろ)までを選択し、オートフィルで最終行まで広げます。
サンプルデータが4行目まで入ってるのでC4~H4を選択してオートフィルと書いてますが、C2~H2を選択してフィルハンドルをドラッグして広げても大丈夫です。
数式のコピーペーストでもできますが、配列を使っているため、C2~H2をコピーしたら、C3~H3以降を範囲選択して貼り付けてください。
コピー元と貼り付け先が被ると、警告が表示されて貼り付けができません。
完成
もう完成です。
F列に都道府県、G列に市区町村、H列にそれ以降という形で分割されています。
非対応部分について
特徴のところで書きましたが、あと4自治体だけ対応できていません。
それについては、総務省のデータに、下図のように手で直接追加してください。
これに限らず、要チェックになった市区町村で、問題がないと判断した住所については、ここに追記してしまえば要チェックが外れます。
解説
ここからは、どういう仕組みか詳しく知りたい方向けのお話。
一度市区町村チェック
まずは一度、住所データと市区町村リストを見比べて、存在すればその自治体を表示、無ければ要チェックを表示させます。
ここの仕組みについては、下記記事をご覧ください。
郡なし住所を用意
総務省が配布している市区町村リストは、栃木県芳賀郡市貝町のように、市区町村の前に郡がある自治体は、栃木県市貝町というように、郡の部分が省略されています。
つまり前段階では、栃木県芳賀郡市貝町を探しても見つからないので、要チェック扱いになってるわけです。
そこで、要チェックだった場合、都道府県以降に郡の文字があるかを探し、郡部分を省略した住所を作り出しています。
これによって、栃木県芳賀郡市貝町は栃木県市貝町のように、郡部分が抜けた状態に変換されています。
もう一度市区町村チェック
先ほど、郡部分を除いた住所を作り出しました。
つまり、1回目のチェックでは栃木県芳賀郡市貝町を市区町村リストから探した結果見つからず要チェックとなりましたが、今回は郡部分のない栃木県市貝町を探すことになりますので、市区町村リストから探し出せます。
郡山市はどうなる
郡山市のように、郡じゃないけど郡の文字がある場合、第一チェックですでに郡山市が見つかっているため、そもそも郡なし住所を作る段階まで進まないようにすることで解決しています。
我ながら完璧では。
都道府県で分割
シンプルに、先頭3文字目以降の都道府県の単語を見つける事で、都と府が混在する東京都府中市にも、京都府にも、和歌山県のような4文字の県にも対応しています。
また、第二チェックが要チェックの場合は要チェックを表示することで、存在しない都道府県の場合にも対応しています。
市区町村で分割
第二チェック時点で要チェックならそもそも存在しない住所なので要チェックを表示。
第二チェック時点で問題なしなら、郡対応も関係ない第一チェックで完結してるので、第一チェックの結果から都道府県以降を表示。
第二チェックで住所が出ている場合は、元住所の文字数から、郡なし住所の文字数を引くなどして、うまい具合に郡部分も含めたうえで市区町村部分までが表示されるように頑張ってます。
とにかくうまい具合に何かしてるんです。
市区町村の後ろで分割
最後は簡単ですね。
もう市区町村までが何文字かわかっているので、それ以降を表示させて完了です。
丁、番地まではやりません
市区町村で分けるところまでくると、次は丁と番地ですが、これについては触れる予定はありません。
無理です。僕では無理です。
セイウチ町1丁目1番地セイウチ1丁目ビル1Fみたいな住所があると、後ろから丁目を探して区切る方法が使えません。
前から丁を探す場合も、そもそもセイウチ町1-1と書かれてたらお手上げです。
精度は低くても良いから!という場合は、下記の式のように丁目を目印に区切るなどの方法をとってみてください。
【例】H2セルが市区町村で区切ったあとの文字列(美浜区1丁目1番市営セイウチ団地101)の場合
=RIGHTB(LEFT(H2,FIND("丁目",H2)-1),2)*1
これで、1丁目なので1という数値を取得できます。
ただし丁目の数字が全角(文字列)だと、10丁目以上がうまく取れなくなります。
半角で10丁目となっていればセーフ。
丁目より前が全部取れればいいよっていうなら、RIGHTB関数の部分を消しちゃってください。
完走した感想
ぬわああああん疲れたもおおおおん(定型文)
ケとヶ問題に続き、郡問題が発覚し、対処したら式が長すぎるわで、思った以上に苦戦しましたが、結果的にはかなり精度の高い分割の仕組みができたんじゃないでしょうか。
世に出てる市区町村で分割するネタの中でも、じゅうぶん上位の品質だと自負しております。
コメント
住所分割のデータ使用させて頂きました。
シート「使い方」のD7のセルの「現在の団体」の参照範囲をご教授ください。
このデータを少し編集して使用したいです。
住所分割、使用していただきありがとうございます。
>シート「使い方」のD7のセルの「現在の団体」の参照範囲をご教授ください。
使い方シートのD7セルがどこで使われているか、というご質問でよろしかったでしょうか。
使い方シートのD7セルは、住所分割シートの第1作業、第2作業にて、VLOOKUP関数の検索範囲に使用しています。
式内に何度も出てきますが、INDIRECT(使い方!$D$7 & “!F:F”)の部分です。
現在の団体シートにあたるデータを独自に用意されたい場合は、用意したシート(今回は例として「現在の団体B」とします)をコピーしてきたうえで、使い方シートのD7セルを「現在の団体B」と書き換えて使う事ができます。