郵便番号一覧から住所を求めていく、REST APIを使ったVBAのサンプルコードを公開してみます。
使用するWebAPI
Excel単体で住所情報検索はできないので、下記「郵便番号検索API」の力を借ります。
サービス名 | 郵便番号検索API |
運営 | 株式会社アイビス |
URL | https://zipcloud.ibsnet.co.jp/doc/api |
概要 | 郵便番号検索APIは、日本郵便が公開している郵便番号データを検索する機能をRESTで提供しています。 |
仕様
画面仕様
- 表のA列に住所を求めたい「郵便番号」の一覧を入力しています。
- 表の右に住所出力の実行ボタンが配置されています。
- 実行ボタンを押下すると、B列とC列に「住所」と「住所(カナ)」が出力されます。
ソースコード
Sub ボタン1_Click()
Dim objXMLHttp As Object, zipArr
Dim yubinNo 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", "https://zipcloud.ibsnet.co.jp/api/search?zipcode=" & yubinNo, False
objXMLHttp.Send
Dim address As String
Dim kana As String
address = ""
kana = ""
'JSON-Paserなしを前提としたコード
Dim text As Variant
text = Split(objXMLHttp.responseText, vbLf)
For j = 0 To UBound(text)
Dim line As String
line = text(j)
'住所
If InStr(line, "address") Then
address = address + getFormattedValue(line)
'改行
If InStr(line, "address3") Then
address = address + vbLf
End If
End If
'カナ
If InStr(line, "kana") Then
kana = kana + getFormattedValue(line)
'改行
If InStr(line, "kana3") Then
kana = kana + vbLf
End If
End If
Next j
'余計な改行を除去
If Right(address, 1) = vbLf Then
address = Left(address, Len(address) - 1)
End If
If Right(kana, 1) = vbLf Then
kana = Left(kana, Len(kana) - 1)
End If
'セル格納
Worksheets("Sheet1").Cells(i, 2).value = address
Worksheets("Sheet1").Cells(i, 3).value = kana
i = i + 1
Loop
End Sub
Function getFormattedValue(value As String)
Dim reg As Object
Set reg = CreateObject("VBScript.RegExp")
With reg
.Pattern = "^.+:\s""|"",$" ' "^.+:\s"|",$" 行が「"address1": "高知県",」ならば、高知県の前の~": "と後の",を削除
.IgnoreCase = False ' 大文字小文字区別
.Global = True ' 文字列全体対象
End With
getFormattedValue = reg.Replace(value, "") ' 空文字に置換
End Function
ソースコードの補足
郵便番号の数だけ、下記の処理を繰り返します。
- A列にある郵便番号の値を1つ取得します。
- 郵便番号をもとに「郵便番号検索API」から、郵便番号に対応した住所を取得します。
- APIから取得した住所をExcelシートのB列、C列に出力します。
- 住所情報が分割されているので結合します
- もし複数件の住所がある場合は、改行して出力します
APIから返ってくる値はJSON形式です。
VBAでJSONを使用する場合、JSON Parserを使用するときれいに扱えるのですが、別途モジュールのインポートが必要です。
私のPCをクリーンにするため、正規表現を使って加工していますが、どちらでもよいかとおもいます。
※別サイトではJSON Parserの例が紹介されています。
実行結果
ボタンを押下した結果、住所欄と住所(カナ)欄に住所が出力されました。
参考情報
環境
下記の環境で作成・実行しております。
No. | 環境 | バージョン |
---|---|---|
1 | OS | Windows11 |
2 | Excel | Excel2016 |
以上です。
コメント