「住所データが一つのセルにまとまっていて、都道府県ごとに並べ替えられない…」
「DMを送るために、住所から建物名だけを抽出したいけど、手作業は大変すぎる…」
「入力された住所の形式がバラバラで、データの整理に時間がかかってしまう…」
これらの課題は、Googleスプレッドシートの関数やGAS(Google Apps Script)を使えば、自動で解決できるかもしれません。
この記事では、一つのセルに入力された住所を「都道府県」「市区町村」「町名・番地」「建物名・部屋番号」といった階層ごとに自動で分割し、整理する方法を解説します。コピー&ペーストで使えるサンプルコードも用意していますので、ぜひ最後までご覧ください。
この記事でできること・難しいこと
まずはじめに、この記事で解説する方法で対応できることと、対応が難しいことを明確にしておきます。
【できること】
- 「東京都千代田区丸の内1-1-1 〇〇ビル101」のような一般的な形式の住所を分割する
- 都道府県、市区町村、町名・番地、建物名・部屋番号 の4つの階層に分割する
- 「四日市市」や「市川市」のように、地名に「市」が含まれる住所にも対応する
【できないこと・難しいこと】
- 7階層(都道府県、市、行政区、町域名、番地、建物名、号室)への完璧な分割:住所表記の多様性から、特に「町域名」以降をルールベースで完璧に分割する
- 「京都市中京区烏丸通御池上ル」のような、歴史的な通り名を含む特殊な形式の住所の完全な分割
- 明らかに間違っている住所(例:郵便番号と住所が一致しない)の修正
今回ご紹介する方法は、多くの一般的な住所データに対応できますが、すべての形式に100%対応するものではない点をご理解ください。
準備:住所分割の完成形イメージ
まずは、どのような状態を目指すのか、完成形を確認しましょう。
今回は、A列に入力された住所データを、B列からE列にそれぞれ「都道府県」「市区町村」「町名・番地」「建物名・部屋番号」として分割します。

※画像内の住所はサンプルであり、実際の住所とは異なる場合があります
最終的には、A列の住所を更新すれば、B列からE列も自動で更新される状態を目指します。
関数を使って住所を分割する方法
まずは、比較的簡単な「関数」を使って住所を分割する方法から解説します。専門的な知識は不要で、数式をコピー&ペーストして少し調整するだけで実現できます。
今回は、特定のパターン(ルール)に一致する文字列を抽出できるREGEXEXTRACT関数を主に使用します。
ステップ1:都道府県を抽出する
最初に、住所データから「都道府県」の部分だけを取り出します。
B2セルに、以下の数式を入力してください。
=IFERROR(REGEXEXTRACT(TRIM(A2),"^(北海道|東京都|京都府|大阪府|[^ ]+県)"),"")

TRIM関数で前後の余分なスペースを削除してから、正規表現で都道府県名を抽出しています。
ステップ2:市区町村を抽出する
次に、市区町村を抽出します。
C2セルに、以下の数式を入力してください。
=IFERROR(
REGEXEXTRACT(
REGEXREPLACE(MID(TRIM(A2),LEN(B2)+1,999),"^[ ]+",""),
"^([^\d0-9\--ー ]+市[^\d0-9\--ー ]+区|[^\d0-9\--ー ]+市|[^\d0-9\--ー ]+郡[^\d0-9\--ー ]+(?:町|村)|[^\d0-9\--ー ]+区|[^\d0-9\--ー ]+町|[^\d0-9\--ー ]+村)"
),
""
)

ステップ3:町名・番地を抽出する
詳細な番地表記(漢数字の丁目、「-(ハイフン)」、「番地」など)を正規表現で抽出します。
D2セルに、以下の数式を入力してください。
=IFERROR(
REGEXEXTRACT(
REGEXREPLACE(MID(TRIM(A2),LEN(B2)+LEN(C2)+1,999),"^[ ]+",""),
"^([^ ((]*?(?:(?:[0-90-9]+)(?:丁目)?|[一二三四五六七八九十〇零百千]+丁目)(?:[ ]*(?:北東|北西|南東|南西|中央|東|西|南|北|中))?(?:[ \-‐-–—―−-ーーの]?(?:[0-90-9]+))*(?:(?:番地|番|号)(?:の)?(?:[0-90-9]+)?)*)"
),
IFERROR(
REGEXEXTRACT(
REGEXREPLACE(MID(TRIM(A2),LEN(B2)+LEN(C2)+1,999),"^[ ]+",""),
"^([^ ((]+)"
),
""
)
)

ステップ4:建物名・部屋番号を抽出する
最後に、元の住所から「都道府県」「市区町村」「町名・番地」をすべて取り除き、残った部分を建物名とします。
E2セルに、以下の数式を入力してください。
=TRIM(SUBSTITUTE(
A2,
B2&C2&D2,
""
))

これで、関数を使った4階層の住所分割は完了です。すべての行に数式をコピーして適用してください。
GASを使って住所を分割する方法(応用編)
「関数ではうまく分割できない」「より精度高く分割したい」という方には、GAS(Google Apps Script)を使った方法がおすすめです。GASを使うことで、より複雑な条件分岐が可能になり、分割の精度を高めることができます。
ここでは、住所を4階層に分割するカスタム関数を作成します。
GAS(Google Apps Script)の基本的な使い方やスクリプトの保存方法については、こちらの記事で詳しく解説しています。
ステップ1:スクリプトを準備する
以下のコードをスクリプトエディタに貼り付け、保存してください。
/**
* 住所を都道府県、市区町村、町名番地、建物名以降の4つに分割する
* @param {string} address 分割したい住所の文字列
* @return {Array<string>} 分割後の文字列の配列
* @customfunction
*/
function SPLIT_ADDRESS_V2(address) {
if (!address || typeof address !== 'string') {
return ["", "", "", ""];
}
let fullAddress = address.trim();
let prefecture = "";
let municipality = "";
let street = "";
let building = "";
// 1. 都道府県の抽出
const prefRegex = /^(北海道|東京都|京都府|大阪府|[^ ]+県)/;
const prefMatch = fullAddress.match(prefRegex);
if (prefMatch) {
prefecture = prefMatch[0];
fullAddress = fullAddress.substring(prefecture.length).trim();
}
// 2. 市区町村の抽出
const cityRegex = /^([^\d0-9\--ー ]+市[^\d0-9\--ー ]+区|[^\d0-9\--ー ]+市|[^\d0-9\--ー ]+郡[^\d0-9\--ー ]+(?:町|村)|[^\d0-9\--ー ]+区|[^\d0-9\--ー ]+町|[^\d0-9\--ー ]+村)/;
const cityMatch = fullAddress.match(cityRegex);
if (cityMatch) {
municipality = cityMatch[0];
fullAddress = fullAddress.substring(municipality.length).trim();
}
// 3. 町名番地と建物名の分割
const streetRegex = /^([^ ((]*?(?:(?:[0-90-9]+)(?:丁目)?|[一二三四五六七八九十〇零百千]+丁目)(?:[ ]*(?:北東|北西|南東|南西|中央|東|西|南|北|中))?(?:[ \-‐-–—―−-ーーの]?(?:[0-90-9]+))*(?:(?:番地|番|号)(?:の)?(?:[0-90-9]+)?)*)/;
const streetMatch = fullAddress.match(streetRegex);
if(streetMatch){
street = streetMatch[0];
building = fullAddress.substring(street.length).trim();
} else {
// 番地が見つからない場合は、建物名がないと判断
street = fullAddress;
building = "";
}
return [prefecture, municipality, street, building];
}
ステップ2:スプレッドシートでカスタム関数を実行する
スプレッドシートに戻り、関数を使いたいセル(今回はB2セル)に、以下の数式を入力します。
=TRANSPOSE(SPLIT_ADDRESS_V2(A2))

あとは、関数を使った方法と同じように、フィルハンドルをドラッグして下の行にも数式をコピーすれば完了です。
まとめ
今回は、Googleスプレッドシートで住所データを4つの階層に自動的に分割する方法を、「関数」と「GAS」の2つのアプローチで解説しました。
- 手軽に試したい、コピー&ペーストで実装したい → 関数がおすすめ
- より複雑な処理や、メンテナンス性を重視したい → GASがおすすめ
住所データの整理は、顧客管理やマーケティング活動の第一歩です。手作業で時間をかけるのではなく、スプレッドシートの機能を活用して、業務を効率化してみてはいかがでしょうか。
※Googleサービスは、Google LLC の商標であり、この記事はGoogleによって承認されたり、Google と提携したりするものではありません。