スプレッドシートで住所を「都道府県」と「市区町村以降」に分ける方法(京都府でずれない式)

記事
IT・テクノロジー
顧客リストや名簿の住所が 1 つの列に入っていて、都道府県ごとに数えたい、宛名ラベル用に分けたい。そんなときに 1 件ずつ手で切り分けるのは大変です。Google スプレッドシートなら、式を 2 つ入れるだけで分けられます。

■ できあがりの形
・A 列:東京都千代田区丸の内1-1(元の住所)
・B 列:東京都(都道府県)
・C 列:千代田区丸の内1-1(市区町村以降)

■ 手順1:都道府県を取り出す
B2 に次の式を入れます。

=IFERROR(REGEXEXTRACT(TRIM(A2),"^(東京都|北海道|(?:京都|大阪)府|.{2}県|.{3}県)"),"")

・先頭の「東京都」「北海道」「京都府」「大阪府」をまず探し、なければ「2 文字+県」、次に「3 文字+県」(神奈川県・和歌山県・鹿児島県)を探します
・TRIM で前後の空白を消してから調べます
・都道府県が書かれていない住所は空欄になります

■ 手順2:残りを取り出す
C2 に次の式を入れます。

=MID(TRIM(A2),LEN(B2)+1,200)

B 列の文字数のぶんだけ先頭を飛ばして、残りを取り出します。B 列が空欄のときは、住所がそのまま入ります。

■ 手順3:下の行にもコピーする
B2 と C2 を選び、右下の小さな四角を下までドラッグします(ダブルクリックでも最後の行までコピーされます)。

■ よく見かける式の落とし穴
ネットでは =REGEXEXTRACT(A2,"^(.+?[都道府県])") という短い式もよく紹介されています。多くの住所ではこれで取れますが、「京都府京都市…」は「京都」で切れてしまいます(「京都」の「都」で止まるため)。京都府の住所が入る名簿では、上の手順1の式を使うのが安全です。47 都道府県それぞれで、手順1の式が正しく取れることを確かめています。

■ つまずきやすい所
・B 列が空欄になる行:都道府県が省略された住所(「名古屋市中区…」など)です。フィルタで空欄の行だけを出して、手で直すか、郵便番号から都道府県を入れる方法を考えます
・数字や記号の全角・半角が混ざっている:分けたあとで、置換(Ctrl + H)でそろえます
・式のままだと並べ替えや貼り付けで崩れる:分け終わったら B・C 列をコピーし、「形式を選択して貼り付け」→「値のみ貼り付け」で値にしておくと安心です
・元の A 列は消さずに残しておくと、間違いに気づいたときに戻せます

■ 市区町村まで分けたいとき
「市」「区」「町」「村」で切る式もありますが、「四日市市」「市川市」「大町町」のように名前の中に同じ字が入る地名があり、式だけで正しく分けるのは難しくなります。件数が多いときは、市区町村の一覧と照合する仕組み(GAS など)を使うほうが確実です。

ご自分で作るのが難しいときは、次の出品でお手伝いしています。
・CSV の文字化け・表記ゆれ・重複を直します:https://coconala.com/services/4455453
・GAS でスプレッドシートの転記・集計を自動化します:https://coconala.com/services/4455227

あわせて読みたい:スプレッドシートで重複したデータを見つけて消す3つの方法 https://coconala.com/blogs/6357864/830909

この記事は、AI(Claude)の助けを借りて書いています。
サービス数100万件のスキルマーケット、あなたにぴったりのサービスを探す