スポンサーリンク

住所を市区町村で区切って分割する方法

関数の応用

 

全国事務作業員の皆さま、お待たせしました。

住所を市区町村で区切って分割する方法、しかも市川市や野々市市などの市が2つある自治体の他、余市町や村山市などの市区町村という単語が2つ含まれる自治体にも対応できる方法が用意できましたので、やり方を紹介いたします。

はじめに注意点

2点、使用上の注意があります。

総務省の全国地方公共団体コードを使用

総務省が提供している、全国地方公共団体コードの、エクセルファイル版を使用します。

総務省|電子自治体|全国地方公共団体コード (soumu.go.jp)

実在する市区町村かをチェックするために使うのですが、たまに合併などで更新がかかるため、適当なタイミングでメンテナンスが必要になります。

ケとヶ問題

現状、日本の市区町村は、ケとヶが統一されていません。

例:青森県外浜町、岩手県金崎町

そのため、総務省提供の情報と、市区町村で区切りたい住所データが不一致である場合、正常に区切ることができません。

事前に対策をとるか、随時直していくかを予め決めておいてください。

対策案1:統一する

作業前に、地方公共団体コードのエクセルファイル、住所データともに、ケ→ヶ、もしくはヶ→ケに変換して統一しておく。

対策案2:地方公共団体コードに追記

地方公共団体コードのエクセルファイルに、ケがついてる市区町村はケとヶの両バージョンを手作業で追加する。

対策案3:関数を改良する

今回紹介する方法を、SUBSTITUTE関数(文字を置き換える関数)などを使って改良してください。

SUBSTITUTE関数 – 文字を置き換える | エクセル小技集 (excelkowaza.com)

総務省データがケかヶのどちらかに統一されていれば、今回対応しようと思いましたが、混在しているせいでもう面倒になりました。

住所データを市区町村で分割する手順

先にあげた注意点に気をつけつつ(特にケとヶ問題は要注意)、実際に住所データを市区町村までと、それ以降で分割してみましょう。

区切りたい住所データを用意

そもそも市区町村で区切りたい住所データがないと話が始まらないので。

今回は下図のデータをもとに進めていきます。

 

総務省からエクセルファイルを拝借

総務省ホームページから、全国地方公共団体コードのエクセルファイルをダウンロードします。

総務省|電子自治体|全国地方公共団体コード (soumu.go.jp)

現在の団体シートをコピー

全国地方公共団体コードのエクセルファイルから、現在の団体シートをコピー、または移動で持ってきます。

都道府県と市区町村を合体

現在の団体シートで、都道府県と市区町村を合体させておく。

今回は、F2に=B2&C2と式を入れ、オートフィルで最終行まで反映させます。

市区町村で区切る

まずは何も考えず、下記式の住所セル(8か所)市区町村表(2か所)を置き換え、実際にエクセル上にその式を入れて、Ctrl+Shift+エンターで確定させてください。

=IFERROR(VLOOKUP(IFERROR(VLOOKUP(LEFT(住所セル,MIN(IFERROR(FIND({“市”,”区”,”町”,”村”},住所セル),LEN(住所セル)))),市区町村表,1,FALSE),LEFT(住所セル,MIN(IFERROR(FIND({“市”,”区”,”町”,”村”},住所セル,MIN(IFERROR(FIND({“市”,”区”,”町”,”村”},住所セル)+1,LEN(住所セル)))),LEN(住所セル))))),市区町村表,1,FALSE),”要チェック”)

今回の例の場合、住所セルをA2、市区町村表をR1.5.1現在の団体!F:Fに置き換えて、下記のような式になります。

=IFERROR(VLOOKUP(IFERROR(VLOOKUP(LEFT(A2,MIN(IFERROR(FIND({“市”,”区”,”町”,”村”},A2),LEN(A2)))),R1.5.1現在の団体!F:F,1,FALSE),LEFT(A2,MIN(IFERROR(FIND({“市”,”区”,”町”,”村”},A2,MIN(IFERROR(FIND({“市”,”区”,”町”,”村”},A2)+1,LEN(A2)))),LEN(A2))))),R1.5.1現在の団体!F:F,1,FALSE),”要チェック”)

そしてCtrl+Shift+Enterで式を確定させると、自動的に式が{}で囲まれます。

あとはオートフィルなどで、式を最終行まで反映させます。

ここで、もし住所が存在しない市区町村であったり、ケとヶ問題に引っかかった場合は、要チェックと表示されますので、住所データを手直ししましょう。

市区町村のあと部分を抜き出す

最後に、住所の市区町村より後ろの部分を抜き出します。

ここは色々なパターンがありますが、今回は下記の式を使いましょう。

式:=MID(住所セル,LEN(市区町村セル)+1,LEN(住所セル))

今回の場合は住所セルがA2、市区町村セルがB2になるので、置き換えるとこうなります。

式:=MID(A2,LEN(B2)+1,LEN(A2))

この仕組みの考え方

今回のはやたらと長い式なので、式の解説ではなく、どういう事をしている式なのかをお話しましょう。

  1. 市、区、町、村の文字を探しだす
  2. 市、区、町、村の文字が見つかったところまでを自治体名とする
  3. 自治体名が本当に存在するかチェック
  4. 自治体が存在しなかった場合、次の市区町村の文字を探しだす
  5. 2つ目の市区町村の文字までを自治体名とする
  6. また自治体名が本当に存在するかチェック
  7. それでも存在しなかったら要チェックと表示する

少し掘り下げていきましょう。

市、区、町、村の文字を探しだす

最初に、市区町村の文字が何文字目にあるか探し出します。

たとえば、北海道札幌市なら6文字目、北海道余市町なら5文字目となります。

市、区、町、村の文字が見つかったところまでを自治体名とする

最初に市区町村の文字が見つかったところまでを、ひとまず自治体名(市区町村名)と仮定します。

北海道札幌市は北海道札幌市ですが、北海道余市町は北海道余市となります。

自治体名が本当に存在するかチェック

公共団体コードの一覧から、先ほど仮定した自治体名を探します。

北海道札幌市はもちろん存在するので、そのまま結果を表示して終わりです。

しかし、北海道余市は存在しないので、次の処理へ進みます。

ここから先が、北海道余市町や、千葉県市川市などの、市区町村の文字が複数存在する自治体対策となります。

自治体が存在しなかった場合、次の市区町村の文字を探しだす

北海道余市町から市区町村の文字を探し出した後、そこからもう一度、市区町村の文字を探します。

北海道余市町の場合、最初に5文字目に市が見つかります。

そして、5文字目より先から、再び市区町村の文字を探しだすので、6文字目の町を見つける事になります。

2つ目の市区町村の文字までを自治体名とする

今度は6文字目で町を見つけたので、北海道余市町を自治体名とします。

また自治体名が本当に存在するかチェック

今度は北海道余市町が、公共団体コードのリストに存在するかをチェックします。

これで無事、北海道余市町がちゃんと、北海道余市町と表示されるようになります。

それでも存在しなかったら要チェックと表示する

ここで要チェックと表示されるということは、公共団体コードに存在しない住所だという事になるので、そもそもの住所データを疑いましょう。

ケとヶ問題の他に、いつのまにか町が市になってましたーなんて事に気づくチャンスにもなります。

あとがき

市区町村で区切る方法を探すと、市原市などで引っかかってしまったり、もしくはマクロ使いましょうって話がほとんどです。

マクロ使うと住所データリストのレイアウトが変わってしまう(A列からB列に移動しただけでも)といちいち手直しが必要になるし、せっかく作ったマクロを消滅させてくる人(xlsxで保存されて、しかもご丁寧にxlsmを削除された)もいるので、マクロは避けたかった。

そして、市川市やら野々市市などを、わざわざ1件ずつ手直しするのも嫌だった。

で、今回の方法が作られたというわけです。

総務省から自治体データ拾ってくるという手間はありますが、一度用意してしまえば、行列の挿入・削除などにもそこそこ耐えられる仕組みになってますので、ぜひご活用ください。

参考までに、市区町村が複数ある自治体リスト

2021/4/7現在、市区町村という文字が2つ存在する自治体は24か所でした。

  1. 北海道余市町
  2. 宮城県村田町
  3. 山形県村山市
  4. 福島県田村市
  5. 栃木県市貝町
  6. 群馬県玉村町
  7. 千葉県市川市
  8. 千葉県市原市
  9. 東京都町田市
  10. 東京都東村山市
  11. 東京都武蔵村山市
  12. 東京都羽村市
  13. 新潟県十日町市
  14. 新潟県村上市
  15. 富山県上市町
  16. 石川県野々市市
  17. 山梨県市川三郷町
  18. 長野県大町市
  19. 三重県四日市市
  20. 兵庫県市川町
  21. 奈良県下市町
  22. 広島県廿日市市
  23. 佐賀県大町町
  24. 長崎県大村市

コメント

タイトルとURLをコピーしました