VBAからREST APIを呼び出してJSONデータを取得する方法を紹介します。サンプルプログラムとして、郵便番号から住所を取得します。今回利用する郵便番号APIは無料で利用でき、アカウント登録なども不要です。
APIを利用するには、「Dictionary」と「XMLHTML60」クラスを使います。よって、参照設定にて「Microsoft Scripting Runtime」と「Microsoft XML, v6.0」をONにしておいてください。
またレスポンスがJSON形式で返却されるためパース処理が必要となります。JsonConverterを利用しますので、以下記事を参照してVBA-JSONの設定を完了させてください。
サンプルプログラム
Option Explicit
Sub sample()
Dim httpReq As New XMLHTTP60 '「Microsoft XML, v6.0」を参照設定
Dim params As New Dictionary '「Microsoft Scripting Runtime」を参照設定
Dim pCode As String
pCode = "100-0014" '郵便番号
With httpReq
.Open "GET", "https://madefor.github.io/postal-code-api/api/v1/" & Left(pCode, 3) & "/" & Right(pCode, 4) & ".json"
.Send
End With
Do While httpReq.readyState < 4
DoEvents
Loop
Debug.Print "GETレスポンス"
Debug.Print httpReq.responseText
Debug.Print ""
' JSONパース
Dim jsonObj As Object
Set jsonObj = JsonConverter.ParseJson(httpReq.responseText)
Debug.Print "JSON整形"
Debug.Print JsonConverter.ConvertToJson(jsonObj, " ")
Debug.Print ""
Debug.Print jsonObj("data")(1)("ja")("prefecture") ' 東京都
Debug.Print jsonObj("data")(1)("ja")("address1") ' 千代田区
Debug.Print jsonObj("data")(1)("ja")("address2") ' 永田町
End Sub
出力結果
GETレスポンス
{"code":"1000014","data":[{"prefcode":"13","ja":{"prefecture":"東京都","address1":"千代田区","address2":"永田町","address3":"","address4":""},"en":{"prefecture":"Tokyo","address1":"Chiyoda-ku","address2":"Nagatacho","address3":"","address4":""}}]}
JSON整形
{
"code": "1000014",
"data": [
{
"prefcode": "13",
"ja": {
"prefecture": "\u6771\u4EAC\u90FD",
"address1": "\u5343\u4EE3\u7530\u533A",
"address2": "\u6C38\u7530\u753A",
"address3": "",
"address4": ""
},
"en": {
"prefecture": "Tokyo",
"address1": "Chiyoda-ku",
"address2": "Nagatacho",
"address3": "",
"address4": ""
}
}
]
}
東京都
千代田区
永田町