〖ExcelVBA〗郵便番号データベース(CSV)を使って住所を自動検索するマクロ|日本郵便のデータに対応

ExcelVBA

Excelで郵便番号を入力したら、自動で住所(都道府県・市区町村・町域)を表示したい。そんな業務はとても多いですよね。

そこで本記事では、日本郵便が公開している郵便番号データベース(CSV) を使い、 郵便番号から住所を検索する ExcelVBA マクロをご紹介します。

名簿作成、顧客管理、帳票入力など、 あらゆる事務作業に役立つ実用的なマクロです。

また別の記事で、住所から都道府県だけを自動抽出するマクロを紹介しています。
こちらもぜひご覧ください。

〖ExcelVBA〗住所から都道府県名だけを抽出するマクロ|47都道府県に対応した実用的な方法
名簿や顧客リストなどにある「住所」から、都道府県だけを取り出したい場面はとても多いです。しかし Excel 関数だけでは精度が低く、手作業では時間がかかります。そこで今回は、住所から正確に都道府県名だけを抽出できる ExcelVBA マクロ...
スポンサーリンク
スポンサーリンク

目次

1. 郵便番号データの入手方法

日本郵便公式ページから無料でダウンロードできます。

👉 郵便番号データ(全国一括)

読み仮名データの促音・拗音を小書きで表記するもの - zip圧縮形式 日本郵便
郵便番号データのうち、「ホッカイドウ」のように促音・拗音を小書きで表記したデータをご提供しています。

ダウンロード後、ZIP を解凍すると KEN_ALL.CSV(全国版)が入っています。

KEN_ALL.CSV の構造

1列目:全国地方公共団体コード  
2列目:旧郵便番号  
3列目:郵便番号(7桁)  
4列目:都道府県名  
5列目:市区町村名  
6列目:町域名  
…(以下略)

今回使うのは、 郵便番号、都道府県、市区町村、町域 の4つです。


2. Excelシートの準備

次のようなシートを用意します。

①「住所検索」シート(メイン画面)

シート名を「住所検索」に変更して、A列に郵便番号を入力してください。B列にはマクロで住所が自動反映されますので、B1だけに「住所(自動)」と入力してください。

②「KEN_ALL」シート(住所DB)

KEN_ALL.CSV をこのシートに貼り付けます。

データが数十万行ありますが、VBAなら高速検索できます。


3. 郵便番号→住所検索マクロ(コピペOK)

以下を標準モジュールに貼り付けます。

Option Explicit

' 郵便番号(7桁)から住所を検索する関数
Function GetAddressFromPostcode(postcode As String) As String

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim pc As String
    Dim pref As String, city As String, town As String

    Set ws = Worksheets("KEN_ALL")

    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    ' 郵便番号の桁調整(例:1000001 → "1000001")
    postcode = Replace(postcode, "-", "")
    If Len(postcode) <> 7 Then Exit Function

    For i = 1 To lastRow

        pc = CStr(ws.Cells(i, 3).Value)

        If pc = postcode Then

            pref = ws.Cells(i, 7).Value
            city = ws.Cells(i, 8).Value
            town = ws.Cells(i, 9).Value

            GetAddressFromPostcode = pref & city & town
            Exit Function
        End If

    Next i

End Function

' メイン処理:A列の郵便番号からB列へ住所を反映
Sub FillAddress()

    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim postcode As String

    Set ws = Worksheets("住所検索")

    lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row

    For i = 2 To lastRow

        postcode = CStr(ws.Cells(i, 1).Value)
        ws.Cells(i, 2).Value = GetAddressFromPostcode(postcode)

    Next i

    MsgBox "住所検索が完了しました!", vbInformation

End Sub

4. コード解説

① CSV の住所データを Excel に貼るだけで利用可能

プログラム内に住所データを埋め込まず、 日本郵便提供の CSV をそのまま使えるのでメンテナンスが簡単です。

② 郵便番号の 7 桁一致で検索

If pc = postcode Then

郵便番号は重複しないため、 1件一致したら即終了で高速です。

③ 関数化して再利用しやすく

Function GetAddressFromPostcode()

他のVBA処理からも呼び出し可能で、拡張性が高い構造にしています。

④ ハイフン付きにも対応

postcode = Replace(postcode, "-", "")

「100-0001」でも問題なく検索できます。


5. 応用テクニック

① 住所を「都道府県/市区町村/町域」に分けて書き込む

下記のようにすると、列ごとに書き分けられます。
※表示列は変更されている場合がありますので、都度適切な列番号を設定ください。

Cells(i, 7).Value = pref
Cells(i, 8).Value = city
Cells(i, 9).Value = town

② 複数一致する場合の処理(町域が複雑な地域)

北海道・沖縄などで町域が複数パターンある場合に備えて、 候補を一覧で返す関数も作れます。

③ 入力時に自動変換(Worksheet_Change でリアルタイム処理)

郵便番号を入力した瞬間に住所が出るようにできます。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 1 Then
        Target.Offset(0, 1).Value = GetAddressFromPostcode(Target.Value)
    End If
End Sub

6. 実行方法

  1. 日本郵便サイトから KEN_ALL.CSV をダウンロード
  2. Excel の「郵便番号DB」シートに CSV の内容を貼り付け
  3. 標準モジュールにマクロを貼り付け
  4. 「住所検索」シートの A 列に郵便番号を入力
  5. FillAddress マクロを実行

これだけで、郵便番号から住所を自動検索できるシステムが完成します。

まとめ:VBAなら住所検索が一瞬でできる

今回紹介した「郵便番号→住所検索マクロ」は、 以下のような使い方に最適です。

  • 名簿入力の効率化
  • 請求書・発送伝票作成
  • 顧客データの住所補完
  • システムへの住所入力補助

日本郵便の公式データを使うので精度が高く、 毎月更新されても簡単に差し替えできる柔軟な仕組みです。

さらに「逆引き検索(住所→郵便番号)」や 「市区町村ごとの自動分類」なども実装できますので、 必要であれば別記事で解説します!

スポンサーリンク
スポンサーリンク
ExcelVBA
いがぴをフォローする

コメント

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