すぐ使う人のための Excel VBA + Web - 郵便番号検索API -


この記事の内容

  1. VBA-JSONをダウンロードし、JsonConverter.basをプロジェクトエクスプローラーに追加する手順の説明

  2. Excelから郵便番号検索APIを利用し、郵便番号に対応する住所を取得するソースコード

  3. ソースコードの解説


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 }



特集記事
最新記事