すぐ使う人のための Excel VBA + Web - 郵便番号検索API -
この記事の内容
VBA-JSONをダウンロードし、JsonConverter.basをプロジェクトエクスプローラーに追加する手順の説明
Excelから郵便番号検索APIを利用し、郵便番号に対応する住所を取得するソースコード
ソースコードの解説
VBA-JSONをダウンロードし、 JsonConverterを追加する
今回は VBA-JSON というものを使います。インターネット上からVBAのソースコード (.bas) をダウンロードして、自分のマクロに組み込むだけで利用できます。
まずはGitHubからダウンロード https://github.com/VBA-tools/VBA-JSON

右上の「Code」から「Download ZIP」を選んでダウンロードします。
ダウンロードが終わると、「VBA-JSON-master.zip」が保存されます。それを解凍すると、次のような内容のフォルダができます。必要なのは「JsonConverter.bas」です。

「JsonConverter.bas」 はVBA Editorの標準モジュールです。自分のマクロのProject Explorer にドラッグ&ドロップすれば使えるようになります。

ソースコード
ソースコードを標準モジュールに貼り付けて、実行してみて下さい。
Sub getAddressFromZipCloud()
Dim http As Object 'XMLHTTP60
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "POST", "https://zipcloud.ibsnet.co.jp/api/search?zipcode=6028202", False
http.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
http.send ""
Dim json As Object
Set json = JsonConverter.ParseJson(http.responsetext)
MsgBox json("results")(1)("address1") & _
json("results")(1)("address2") & _
json("results")(1)("address3")
End Sub
こんな結果が出たら成功です。

ソースコードの解説
API に郵便番号を送信します。 6028202 の部分が郵便番号です。
http.Open "POST", "https://zipcloud.ibsnet.co.jp/api/search?zipcode=6028202", False
ここで、API から返って来たレスポンス(JSON)をパーサーに渡します。
Set json = JsonConverter.ParseJson(http.responsetext)
変数resultsの中には郵便番号の検索結果がすべて含まれています。添え字 (1) を付けて、結果のうち何番目のデータを取り出すかを指定します。これで、 変数results の中の1つ目のデータのaddress1の値を取り出すことができます。
json("results")(1)("address1")
"results"に含まれるデータの数はこのようにすれば取得できます。
json("results").Count
データの数だけループするには、こんな感じでいけます。
Dim i As Integer
For i = 1 To json("results").Count
MsgBox json("results")(i)("address1") & _
json("results")(i)("address2") & _
json("results")(i)("address3")
Next
郵便番号検索API
使う郵便番号検索APIは、 zipcloud ( http://zipcloud.ibsnet.co.jp/doc/api ) です。
このように、urlの後ろに郵便番号をつなげてリクエストを送信すると、レスポンスとしてその郵便番号に対応する住所が返ってきます。
https://zipcloud.ibsnet.co.jp/api/search?zipcode=6028202
Webブラウザに上のurlを入力してEnterを押すと、こんな風に結果が表示されます。
ソースコードの中では http.responsetext の部分でこのテキストを受け取っているわけです。
{ "message": null, "results": [ { "address1": "京都府", "address2": "京都市上京区", "address3": "栄町大宮通一条上る西入", "kana1": "キョウトフ", "kana2": "キョウトシカミギョウク", "kana3": "サカエチョウ", "prefcode": "26", "zipcode": "6028202" }, { "address1": "京都府", "address2": "京都市上京区", "address3": "栄町大宮通中立売下る", "kana1": "キョウトフ", "kana2": "キョウトシカミギョウク", "kana3": "サカエチョウ", "prefcode": "26", "zipcode": "6028202" }, { "address1": "京都府", "address2": "京都市上京区", "address3": "栄町智恵光院通一条上る東入", "kana1": "キョウトフ", "kana2": "キョウトシカミギョウク", "kana3": "サカエチョウ", "prefcode": "26", "zipcode": "6028202" }, { "address1": "京都府", "address2": "京都市上京区", "address3": "栄町", "kana1": "キョウトフ", "kana2": "キョウトシカミギョウク", "kana3": "サカエチョウ", "prefcode": "26", "zipcode": "6028202" } ], "status": 200 }