住所から市区町村コードを一括で調べる方法 — VLOOKUPが崩れる4つの原因と現実解
提出先から「市区町村コードを付けて出してほしい」と言われた。別システムとデータを突き合わせたら、コードが一致しない行が大量に出た。ここでは、住所のリストに市区町村コードを付ける作業を整理し、手作業でどこまでできるのか、そして件数が増えたときに何が崩れるのかを論点として並べていきます。
論点1: そもそも「市区町村コード」と呼ばれているものが1種類ではない
作業に入る前に、名前の確認から始めます。正式名称は全国地方公共団体コードです。総務省(当時の自治省)が昭和43年(1968年)に、情報処理の効率化・円滑化のためのコード標準化の一環として設定し、変更が生じるたびに更新されてきました。一覧は総務省の公式ページ(全国地方公共団体コード)で無料公開されています。
ここで最初のつまずきが起こります。総務省の「全国地方公共団体コード仕様」は、このコードを5桁のアラビア整数に1桁の検査数字(チェックデジット)を加えた6桁と定めています。第1・2桁が都道府県、第3〜5桁が市区町村等、第6桁が検査数字です。一方で、JIS X 0401(都道府県コード・2桁)とJIS X 0402(市区町村コード・3桁)を組み合わせた5桁のコードもあり、こちらは検査数字を含みません。
つまり、同じ「市区町村コード」という言葉で、6桁(検査数字つき)と5桁(検査数字なし)の2種類が流通しています。国土数値情報の行政区域データのように5桁で提供されるデータもあり、突き合わせる相手によってどちらが来るかが変わります。検査数字は、第1〜5桁にそれぞれ6・5・4・3・2を乗じた積の和を11で除し、11から余りを引いた値の下1桁、という方式で算出されます。末尾1桁が合わないという現象に心当たりがあれば、片方が6桁でもう片方が5桁、という可能性がまず疑われる、という整理になります。
論点2: 手作業なら、総務省の一覧とVLOOKUPで足りる場面もある
正直に書くと、件数が数十件で、住所が「都道府県名+市区町村名」できれいに分かれているなら、手作業で十分に終わります。手順としては、総務省の公式ページから都道府県コード及び市区町村コードの一覧を入手し、Excelの別シートに貼り、住所側で作った「都道府県名+市区町村名」をキーにVLOOKUP(またはXLOOKUP)で引く、という形になります。
この方法が成立する条件は、①キーが完全一致すること、②コードの桁数が相手先と揃っていること、③手元の一覧が最新であること、の3つです。以下の論点は、この3つが崩れる場面の話になります。
論点3: 政令指定都市の区と東京23区で、住所の粒度とコードの粒度がずれる
「横浜市中区」のように区まで含む住所を、「横浜市」のコードで引こうとすると一致しません。逆もまた起こります。
制度としては、JIS X 0402:2020が指定都市の区のコードを101〜199の連番と定めており、総務省の仕様も特別区および指定都市の区を101〜199の連番号で表示すると規定しています。指定都市本体は100です。つまり区の単位にもコードが振られていて、市の単位のコードとは別物です。
東京23区はもう一段複雑です。各特別区に個別のコードが割り当てられるのに加えて、総務省の仕様には「なお、利用上の便宜のため、全特別区の区域にコードを付し、これを100で表示する」という定めがあり、23区全体を束ねた集計用のコードも存在します。個々の区と、23区全体と、2つの粒度が同居しています。
なお、政令指定都市の行政区と東京23区の特別区は、コードの見た目は似ていても法的な位置づけが異なります。地方自治法第252条の20に基づく行政区は、指定都市が事務を分掌させるために条例で設置する内部組織であり、法人格を持ちません。特別区は法人格を持つ地方公共団体です。データを作る側としては「どちらもコードが存在する」という事実だけで足りますが、提出先が「市の単位で」と言っているのか「区の単位で」と言っているのかは、確認する価値のある論点になります。
論点4: 同じ名前の市町村があり、市区町村名だけでは一意に決まらない
VLOOKUPのキーを「市区町村名」だけで作ると、同名の自治体で取り違えが起こります。代表例が府中市で、東京都と広島県に同名の市が存在します。広島県府中市が1954年3月31日、東京都府中市が1954年4月1日と、わずか1日違いで市制施行された経緯があるとされています。伊達市も、北海道と福島県の両方に存在します。
漢字表記が完全に一致する「市」同士のペアは、この2組が現存する唯一の例だと複数の資料が一致して述べています。ただしこれは有志が全コード表から集計した情報で、総務省が公式に列挙した一覧として確認できたものではないため、「市に限れば2組」という範囲で捉えるのが安全です。町・村まで広げると、他県間での同名は多数存在します。町村の名称は同一都道府県内での重複が避けられる一方、全国での重複を禁じる仕組みにはなっていないためです。
実務上の帰結はシンプルで、キーは必ず「都道府県名+市区町村名」で作ることになります。住所側に都道府県名が入っていないリスト(「府中市○○町1-2-3」だけの行)は、この時点で一意に決まりません。
論点5: 合併がなくてもコードは変わる
「合併がなければコード表は使い回せる」という前提も、実は成立しません。
市町村数は市792・町743・村183の計1,718(東京23区を加えた総計は1,741)で、直近の市町村合併は2014年4月5日、直近の市制施行は2018年10月1日と、ここ数年は変動がありません。それでも、2024年1月1日に浜松市が行政区を7区から3区(中央区・浜名区・天竜区)へ再編し、対象区の全国地方公共団体コードが変更されました。市そのものは増減していませんが、区の名称・区域・コードが変わっています。
手元のコード表がいつ時点のものか、という確認が要る理由がここにあります。総務省の公式ページには改正一覧表も置かれており、変更の履歴はそこで追えます。
論点6: 件数が増えたときに残るもの
ここまでの5つは、1つずつ潰していけば手作業でも越えられます。問題は、住所が数千件あって、しかも表記が揃っていないときです。
VLOOKUPは完全一致が前提なので、「神奈川県横浜市中区」と「横浜市中区」、全角と半角、「ケ」と「ヶ」のような差が1文字でもあれば引けません。引けなかった行を目視で探して直す作業は、件数に比例して増えます。加えて論点3・4で見たとおり、区の粒度と同名市町村の判定が絡むため、単純な置換では片付かない行が残ります。
もう一つの考え方が、名前で引くのをやめて座標で判定する方法です。住所を緯度経度に変換し、その点がどの行政区域のポリゴンに含まれるかで市区町村を決めれば、表記ゆれや同名の問題は原理的に発生しません。タスデータの市区町村コード付与はこの方式で、国土数値情報の行政区域データ(N03-2025・CC BY 4.0)を使って点がどの区域に入るかを判定し、市区町村コード(5桁)・都道府県・市区町村の3列を返します。
住所の列があるCSVをアップロードすると、市区町村コード・都道府県・市区町村が列として追加されて返ってきます。
表記ゆれの修正やVLOOKUPの突き合わせを挟まずに、そのまま提出用のファイルを作れます。無料アカウントで毎月100行まで試せます。
住所1つだけ確かめたいなら 商圏レポート(住所を入れるだけ・無料) でも市区町村を確認できます。
まとめ
- 正式名称は全国地方公共団体コード。総務省の仕様では5桁+検査数字1桁の6桁で、JIS X 0401/0402由来の5桁と混在している
- 先頭ゼロの脱落・桁数の不一致は、突き合わせが合わない原因の上位に来る
- 政令指定都市の区と東京23区にも101〜199のコードがあり、住所の粒度とコードの粒度がずれる
- 府中市・伊達市のように同名の市があるため、キーは都道府県名込みで作ることになる
- 合併がない期間でもコードは変わる(2024年1月の浜松市の区再編)
- 数十件なら手作業で足りる。数千件・表記ゆれあり、という条件になると、名前で引く方式そのものが限界を迎え、座標で行政区域を判定する方式が選択肢に入る