カテゴリー: スプレッドシート

  • スプレッドシートで郵便番号から住所を入れる3つの方法と、それぞれ壊れるところ

    名簿や受注リストに郵便番号だけがあって、住所の列が空のまま。
    1,000行を手で埋めるのは現実的ではありません。

    やり方は大きく3つあります。どれも動きますが、それぞれ別の壊れ方をします。
    この記事では、やり方と一緒に「何が壊れるか」「どう直すか」まで書きます。

    先に結論

    方法向いている場面気をつけること
    1. 郵便番号データを取り込んで XLOOKUP社外にデータを出したくない。何度も使う先頭ゼロで一致しなくなる。シートが重くなる
    2. GASで外部APIを呼ぶ件数が少ない。すぐ試したい郵便番号が外部サービスに送られる。APIが止まると使えなくなる
    3. アドオンを使う毎回やる。構築に時間をかけたくない自分で中身を直せない

    方法1. 郵便番号データを取り込んで XLOOKUP

    日本郵便が郵便番号データを無償で公開しています。これをシートに取り込んで突き合わせます。

    手順

    1. 日本郵便のサイトから「住所の郵便番号(1レコード1行、UTF-8形式)」をダウンロードする
    2. zip を解凍して CSV を取り出す
    3. スプレッドシートに新しいシートを追加し、郵便番号データ などの名前をつける
    4. 先に C 列(郵便番号)の表示形式を「書式なしテキスト」にしておく(表示形式 → 数値 → 書式なしテキスト)
    5. ファイル → インポート → アップロード から、その CSV を取り込む
    6. 元のシートで XLOOKUP を書く
    =XLOOKUP(TEXT(A2,"0000000"),
             郵便番号データ!$C$2:$C$125000,
             郵便番号データ!$G$2:$G$125000 & 郵便番号データ!$H$2:$H$125000 & 郵便番号データ!$I$2:$I$125000,
             "要確認")

    C列 が郵便番号、G・H・I列 が都道府県・市区町村・町域です(UTF-8・1レコード1行形式の場合)。
    データは約12.5万行なので、範囲は $C:$C のような列全体ではなく、行番号で区切ってください。
    列全体を指定すると、計算のたびに100万行を走査することになり、目に見えて重くなります。

    手順4を飛ばして郵便番号列が数値になってしまった場合は、検索する側だけでなく探される側も TEXT() で揃える必要があります。

    TEXT(郵便番号データ!$C$2:$C$125000,"0000000")

    ただしこれは12.5万行ぶんの変換を毎回走らせることになります。手順4をやっておくほうが軽く済みます。

    壊れるところ① 先頭ゼロが消えて、一致しなくなる

    これが一番よく起きます。

    0600000(札幌市中央区)のようにハイフンなしの7桁をセルに貼ると、スプレッドシートは数値だと解釈して 600000 にします。 先頭の 0 が消えます。

    実際に3つの書き方を貼って確かめた結果です。

    貼り付けた文字列セルの中身配置
    0600000600000右寄せ(数値になった)
    100-0001100-0001左寄せ(文字列のまま)
    0600000(全角)0600000左寄せ(文字列のまま)

    この3つの範囲では、数値に変わったのはハイフンなしの7桁だけでした。
    ハイフンが入っていたり全角だったりすると、数字として解釈されずに文字列のまま残ります。

    だから「うちは大丈夫だった」という人と「全部ずれた」という人が分かれます。
    手元のデータがどの書き方かを、まず確認してください。

    どのくらい影響するか

    日本郵便のデータに入っている郵便番号は 120,720種類(2026年10月6日時点のデータを集計)。
    そのうち 0 で始まるものが 14,081件、全体の 11.7% あります。

    都道府県0で始まる郵便番号
    北海道7,974件
    秋田県2,156件
    青森県2,033件
    岩手県1,918件

    北海道と東北北部が、丸ごと該当します。
    全国の名簿なら、おおよそ9件に1件が合わなくなる計算です。

    直し方

    A. 取り込む前に、列の表示形式を「書式なしテキスト」にしておく

    上の手順4がこれです。先に文字列だと宣言しておけば、先頭ゼロは消えません。

    B. 突き合わせるときに、両側を7桁ゼロ埋めの文字列に揃える

    すでに数値になってしまった列は、TEXT(A2,"0000000") を通せば 0600000 に戻せます。
    検索値と検索範囲の両方を揃えないと一致しません。

    壊れるところ② シートが重くなる

    郵便番号データは約12.5万行あります。列が十数個あるので、セル数は200万近くになります。

    スプレッドシート1ファイルの上限は1,000万セルなので入りはしますが、開くたびに読み込みが走ります。XLOOKUP の範囲を列全体で指定していると、さらに重くなります。

    「開くのが遅くなった」と感じたら、たいていこれです。
    必要な都道府県だけに絞って取り込むと、かなり軽くなります。


    方法2. GASで外部APIを呼ぶ

    郵便番号を渡すと住所を返してくれるWeb APIがいくつか公開されています。
    Apps Script から呼んで、カスタム関数にする方法です。

    件数が少ないときは、これが一番早く動きます。

    壊れるところ① 郵便番号が外部サービスに送られる

    API を呼ぶというのは、自分の手元のデータを、他社のサーバーに送るということです。

    送られるのは郵便番号だけで、氏名や電話番号は送られません。
    ですが名簿の一部であることに変わりはありません。

    • 顧客名簿を扱っているなら、社内の規定に触れないか
    • そのAPIの提供者は、送られた郵便番号をどう扱うと書いているか

    使う前に、この2つは確認してください。 無料で公開されているAPIほど、利用規約やプライバシーポリシーが見当たらないことがあります。

    壊れるところ② APIが止まると、使えなくなる

    個人や小規模な事業者が公開しているAPIは、予告なく停止したり、仕様が変わったりします。

    そうなったときシートがどうなるかは、書き方によって変わります。
    エラー表示になることもあれば、空欄が返ることも、古い値が残ったままになることもあります。
    いずれにせよ、新しい行で住所が取れなくなります。

    自分のシートがどう壊れるかを知っておきたいなら、APIのURLをわざと存在しないものに変えて、一度試してみてください。

    壊れるところ③ 件数が増えると、速度と上限にぶつかる

    1行ずつAPIを呼ぶので、1,000行なら1,000回の通信が発生します。

    • Apps Script の実行時間には上限があります(数分)
    • 外部へのリクエスト回数にも1日あたりの上限があります(Googleアカウントの種別によります)

    数十行なら気になりません。数千行だと、途中で止まります。


    方法3. アドオンを使う

    Google Workspace Marketplace で配布されているアドオンを使う方法です。

    データの取り込みも数式も書かずに済みます。
    そのかわり、中身を自分で直せません。 作者の設計をそのまま受け入れることになります。

    選ぶときは、ここを見てください。

    • データを外部に送るか。 郵便番号データを同梱しているなら通信は発生しません
    • 要求する権限は何か。 インストール時に表示されます。「すべてのスプレッドシート」を求めるものと、「開いているスプレッドシートだけ」のものがあります
    • 該当しない郵便番号の行をどうするか。 空欄で上書きされると、元の内容が消えます

    このサイトについて

    当方も temoba 事務データ整形 という無料のアドオンを作っています。
    Google Workspace Marketplace での公開に向けて、いま Google の審査を受けています。
    上の3点がどうなっているかは使い方のページに書いています。

    記事の内容と当方の利害は一致しているので、そのつもりで読んでください。
    方法1と方法2も、実際に動く手順として書いています。


    どの方法でも、共通して気をつけること

    郵便番号で分かるのは「町域」まで

    郵便番号から分かるのは、都道府県・市区町村・町域(例:千代田)までです。
    番地や建物名は郵便番号には含まれていません。 自動入力できるのはここまでです。

    1つの郵便番号に、複数の住所が割り当てられていることがある

    日本郵便のデータは 124,526行ありますが、郵便番号の種類は 120,720種類です。
    つまり同じ郵便番号が複数行に分かれているものが 1,339件あります。

    このうち、町域名の注記(「(○○を除く)」など)を取り除いても住所が1つに決まらないものが 1,267件(全体の約1.0%)ありました。

    XLOOKUP や VLOOKUP は最初に見つけた1件を返すので、これらでは意図しない町域が入ります。

    また、町域の欄が「以下に掲載がない場合」などの注記だけで、町域そのものが分からない郵便番号が 1,709件あります。
    こちらは市区町村までしか埋められません。

    該当しなかった行を、空欄で潰さない

    存在しない郵便番号、入力ミス、全角と半角の混在。
    一致しなかった行に空欄を書き込むと、元々入っていた住所まで消えます。

    XLOOKUP の第4引数(見つからないときの値)には "" ではなく、"要確認" のような目印を入れておくほうが安全です。あとから絞り込めます。


    まとめ

    困りごと対処
    一部の行だけ住所が入らない先頭ゼロで一致していない。検索値と検索範囲の両方を TEXT(A2,"0000000") で揃える
    北海道・東北だけ全滅している同上。0 で始まる郵便番号が数値化している
    開くのが遅くなった12.5万行がシートに入っている。範囲を列全体で指定していないか確認。必要な県だけに絞る
    ある日から住所が取れなくなった外部APIが停止または仕様変更した可能性
    元の住所が消えた一致しなかった行に空欄を書き込んでいる
    町域が入らない郵便番号がある日本郵便のデータに町域が無い(1,709件)。市区町村までで確定