Excel VBA | 郵便番号データベース方式とAPI方式のハイブリッド運用

Excel VBA VBA
スポンサーリンク

こちらが「郵便番号APIを使った住所取得処理」にエラーハンドリング・リトライ・ログ出力を組み込んだサンプルコードです。
API失敗時に最大3回までリトライし、それでも失敗した場合はログファイルに記録します。


サンプルコード(処理フロー+エラーハンドリング付き)

Option Explicit

' 郵便番号から住所を取得(API+エラーハンドリング+リトライ+ログ出力)
Function GetAddressWithRetry(zipcode As String) As String
    Dim http As Object
    Dim JSON As Object
    Dim result As Object
    Dim url As String
    Dim i As Integer
    Dim success As Boolean
    Dim responseText As String
    
    zipcode = Replace(zipcode, "-", "")
    url = "https://zipcloud.ibsnet.co.jp/api/search?zipcode=" & zipcode
    
    success = False
    
    On Error GoTo ERROR_HANDLER
    
    ' 最大3回リトライ
    For i = 1 To 3
        Set http = CreateObject("MSXML2.XMLHTTP")
        http.Open "GET", url, False
        http.Send
        
        If http.Status = 200 Then
            responseText = http.responseText
            Set JSON = JsonConverter.ParseJson(responseText)
            
            If JSON("status") = 200 Then
                Set result = JSON("results")(1)
                GetAddressWithRetry = result("address1") & result("address2") & result("address3")
                success = True
                Exit For
            End If
        End If
        
        ' 少し待ってから再試行
        Application.Wait (Now + TimeValue("0:00:02"))
    Next i
    
    If Not success Then
        GetAddressWithRetry = "取得失敗"
        Call WriteLog("API失敗: 郵便番号=" & zipcode & " レスポンス=" & responseText)
    End If
    
    Exit Function
    
ERROR_HANDLER:
    GetAddressWithRetry = "エラー発生"
    Call WriteLog("エラー: 郵便番号=" & zipcode & " 内容=" & Err.Description)
End Function

' ログ出力用(テキストファイルに追記)
Sub WriteLog(msg As String)
    Dim fso As Object, ts As Object
    Dim logPath As String
    
    logPath = ThisWorkbook.Path & "\ApiErrorLog.txt"
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set ts = fso.OpenTextFile(logPath, 8, True) ' 8=追記モード
    ts.WriteLine Now & " " & msg
    ts.Close
End Sub
VB

✅ 処理フロー

  1. 郵便番号を整形(ハイフン除去)
  2. APIにリクエスト送信
  3. 成功時 → JSONを解析して住所を返す
  4. 失敗時 → 最大3回までリトライ(2秒間隔)
  5. それでも失敗 → 「取得失敗」と返し、ログファイルに記録

💡 実務での使い方

  • 大量処理:まずローカルDBで検索 → 見つからなければこの関数でAPI呼び出し
  • ログ確認ApiErrorLog.txt を見れば、どの郵便番号で失敗したか追跡可能
  • 拡張:ログに「HTTPステータスコード」や「レスポンス本文」を追加するとさらに便利

👉 このコードを組み込めば、安定性(リトライ)+トレーサビリティ(ログ)を確保した実務レベルの住所取得処理が実現できます。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました