【VBA-API】Web APIを使って郵便番号から住所を取得する(郵便番号検索API)

VBAスクレイピング

こんにちは、blueです。

今回は郵便番号検索APIから住所を取得します。

これまでの記事はこちら
【VBA-API】Web APIを使ってデータを取得する(OpenWeatherMap)1
【VBA-API】Web APIを使って時間別天気予報を取得する(気象庁API)
【VBA-API】Web APIを使ってLINE通知を行う(LINE Notify)1
【VBA-API】Web APIを使って翻訳をする(DeepL API)
【VBA-API】Web APIを使ってNHK番組表を取得する(NHK番組表API)

このAPIを使えば「郵便番号を入力すれば自動的に住所が出る」ようにできます。
APIの使用についても非常に易しいサイトなのでぜひ参考にしていただければ幸いです。

VBAでのAPIにはMicrosoft XML, v6.0の参照設定やVBA-JSONの導入が必要になります。
もしまだの方は以下の記事をご覧ください。

pythonですが会話形式で非常にわかりやすく書かれている書籍です。WebAPIやスクレイピングを一から理解できる内容になっています。ネットからデータを取得したいと思っている方にお勧めの書籍です。

スポンサーリンク

今回のWeb API

今回のサイトは以下です。

郵便番号検索API – zipcloud

このサイトでは郵便番号をもとに該当する住所の情報を取得することができます。
今回は以下のテンプレートを使い、郵便番号を入力すると住所が出るようにします。

クリックすると拡大します

サンプルはこちらをどうぞ。

APIの情報

今回のサイトではAPI Keyの取得は必要ありません。必要なのは「リクエストURL」と「パラメータ」になります。

リクエストURL:https://zipcloud.ibsnet.co.jp/api/search

パラメータ

パラメータ名項目名必須備考
zipcode郵便番号7桁の数字。ハイフン付きでも可。完全一致検索。
callbackコールバック関数名JSONPとして出力する際のコールバック関数名。UTF-8でURLエンコードした文字列。
limit最大件数同一の郵便番号で複数件のデータが存在する場合に返される件数の上限値(数字) ※デフォルト:20

基本的にはzipcodeのみでOKでURLの後ろに「?パラメータ名=”数値”」を記載します。複数件表示させたくない場合は?limit=1とします。

例:https://zipcloud.ibsnet.co.jp/api/search?zipcode=”1000000″

備考にも書かれている通りハイフンの有り無しに関わらず処理してくれます。その為VBA側での処理は不要になります。

全コード

VBAのHTTPリクエストを使ったコードは以下になります。

今回の郵便番号は「6028202」を使用します(ExcelのD2セルに記載)。

Sub 郵便番号API()

   Dim zipcode As String
   Dim address1 As String
   Dim address2 As String
   Dim address3 As String
   Dim i As Long
   
   Dim http As MSXML2.XMLHTTP60
   Set http = New MSXML2.XMLHTTP60
   
   zipcode = ThisWorkbook.Worksheets(1).Range("D2").Value

   'HTTPリクエストにより郵便番号から住所を取得をする
    With http
        Call .Open("GET", "https://zipcloud.ibsnet.co.jp/api/search?zipcode=" & zipcode)
        Call .send
        
        Do
            If .readyState = 4 Then Exit Do
            DoEvents
        Loop
        
        'JSONを出力
        Debug.Print .responseText
        
        'JSONパース
        Dim jsonObj As Object
        Set jsonObj = JsonConverter.ParseJson(.responseText)
        
        ' 検索結果が複数存在する場合は、配列として返される為1つ1つ取得する
        For i = 1 To jsonObj("results").Count
            
            With ThisWorkbook.Worksheets(1)
            .Cells(4 * i, 4).Value = jsonObj("results")(i)("address1")  '住所1
            .Cells(4 * i + 1, 4).Value = jsonObj("results")(i)("address2") '住所2
            .Cells(4 * i + 2, 4).Value = jsonObj("results")(i)("address3") '住所3
            End With
            
        Next
    
    End With
End Sub

各コードの説明

HTTPリクエスト

HTTPリクエストについては以下の記事をご確認ください。

基本的にここまでのやり方は同じです。

全データ取得と出力

次にデータ解析の為、データを取得した後全出力します。

'JSONを出力
        Debug.Print .responseText

イミディエイトウィンドウには以下の様に表示されます。

クリックすると拡大します

この中の「address1」、「address2」、「address3」を取得していきます。

JSONパースと住所の出力

        'JSONを出力
        Debug.Print .responseText
        
        'JSONパース
        Dim jsonObj As Object
        Set jsonObj = JsonConverter.ParseJson(.responseText)
        
        ' 検索結果が複数存在する場合は、配列として返される為1つ1つ取得する
        For i = 1 To jsonObj("results").Count
            
            With ThisWorkbook.Worksheets(1)
            .Cells(4 * i, 4).Value = jsonObj("results")(i)("address1")  '住所1
            .Cells(4 * i + 1, 4).Value = jsonObj("results")(i)("address2") '住所2
            .Cells(4 * i + 2, 4).Value = jsonObj("results")(i)("address3") '住所3
            End With
            
        Next
    
    End With

得られたデータをVBAの方でJSONパースします。
JSONパースについてはこちら

今回取得したいのは以下の情報になります

クリックすると拡大します

今回はresultsキー内の配列([])を取得する形になります。

その為最初のaddress1はjsonObj(“result”)(0)(“address1”)という形で取得します。
このようにして他の情報も取って行きます。

最終的に以下の形で表示されればOKです。

クリックすると拡大します

おまけ

今回は無料サイトの使用でしたが、郵便番号から住所を取得するAPIには以下の様なものがあるようです。

詳しくは以下のサイトを参考ください。

【2021年版】郵便番号APIサービス比較 – Qiita

今回のまとめ

今回は郵便番号APIを使って郵便番号から住所を取得しました。

VBAでAPI操作を行っている書籍は少ないですが以下の書籍は参考になります。

pythonですが会話形式で非常にわかりやすく書かれている書籍です。webAPIやスクレイピングを一から理解できる内容になっています。ネットからデータを取得したいと思っている方にお勧めの書籍です。

↓困ったときは以下が頼りになります。私も利用させてもらってます😊。

TVCMで話題のココナラ

【VBA-API】Web APIを使ってデータを取得する(OpenWeatherMap)1
【VBA-API】Web APIを使って時間別天気予報を取得する(気象庁API)
【VBA-API】Web APIを使ってLINE通知を行う(LINE Notify)1
【VBA-API】Web APIを使って翻訳をする(DeepL API)
【VBA-API】Web APIを使ってNHK番組表を取得する(NHK番組表API)

コメント

タイトルとURLをコピーしました