Excelに郵便番号の一覧はあるけど、住所を1件ずつ調べるのが面倒…
そんなときに、REST API を使えば住所を自動取得できます。
この記事では、Excel VBA から郵便番号検索APIを呼び出して住所を取得する方法を紹介します。
こんな場合にお勧め
- 郵便番号から住所を自動入力したい
- 大量の住所データを一括で変換したい
- 手作業での住所検索をなくしたい
- Excelだけで完結させたい
Excel 単体では住所検索ができないので、外部の「郵便番号検索 API」を使っています。
使用するWebAPI
Excel単体で住所情報の取得・検索はできないので、下記「郵便番号検索API」の力を借りています。
| サービス名 | 郵便番号検索API |
| 運営 | zip.cgis.biz |
| URL | 郵便番号検索API(http://zip.cgis.biz/) |
| 機能 | 郵便番号 → 住所情報(CSV)を返す API |
※API にリクエストして結果を取得しています。
仕様
WebAPIを利用してExcelシートへ住所情報を出力していきます。
- 入力:郵便番号(A列)
- 出力:住所(B列)、住所カナ(C列)
- 通信方式:REST API(GET)
- 取得形式:CSV
Excelの構成
- A列:住所を調べたい郵便番号のリスト
- B列:取得した住所(漢字)
- C列:取得した住所(カナ)
- 実行ボタン:押すと VBA が動く

ソースコード
ソースコードの概要
以下の処理を実行します。
- 郵便番号を取得
- 郵便番号検索 API を呼び出し
- CSVを整形する
- シートへ出力
ソースコードのサンプル
Sub ボタン1_Click()
Dim objXMLHttp As Object, zipArr
Dim yubinNo As Long
Dim line As String
Dim splitLine() As String
Dim i As Long
i = 2 '行番号
Do While Cells(i, 1).Value <> ""
'入力値からハイフンの削除
yubinNo = Replace(Worksheets("Sheet1").Cells(i, 1).Value, "-", "")
Set objXMLHttp = CreateObject("MSXML2.XMLHTTP")
objXMLHttp.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & yubinNo, False
objXMLHttp.Send
line = Replace(objXMLHttp.responseText, vbLf, ",") '改行削除
line = Replace(line, """", "") 'クォート削除
line = Replace(line, "none", "") 'noneの文字列削除(情報がない場合、noneのため)
splitLine = Split(line, ",") 'CSVを配列へ格納
Worksheets("Sheet1").Cells(i, 2).Value = splitLine(13) & splitLine(14) & splitLine(15) & splitLine(16)
Worksheets("Sheet1").Cells(i, 3).Value = splitLine(9) & splitLine(10) & splitLine(11) & splitLine(12)
i = i + 1
Loop
End Sub
補足
- APIから返ってくるデータは CSV形式のテキスト
→ 「改行をカンマに置換」「余計な引用符を削除」などしてから分割処理しています。 - 住所は B列に漢字住所、C列にカナ住所として出力しています。
- Excel 単体では WEB API を呼び出せないため、外部 API を使う必要があります。
実行結果
ボタンを押すと、B列に住所、C列に住所(カナ)が自動入力されました。

参考情報
環境
下記の環境で作成・実行しております。
| No. | 環境 | バージョン |
|---|---|---|
| 1 | OS | Windows10 Windows11 |
| 2 | Excel | Excel2016 |
以上です。