こちらが「郵便番号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✅ 処理フロー
- 郵便番号を整形(ハイフン除去)
- APIにリクエスト送信
- 成功時 → JSONを解析して住所を返す
- 失敗時 → 最大3回までリトライ(2秒間隔)
- それでも失敗 → 「取得失敗」と返し、ログファイルに記録
💡 実務での使い方
- 大量処理:まずローカルDBで検索 → 見つからなければこの関数でAPI呼び出し
- ログ確認:
ApiErrorLog.txtを見れば、どの郵便番号で失敗したか追跡可能 - 拡張:ログに「HTTPステータスコード」や「レスポンス本文」を追加するとさらに便利
👉 このコードを組み込めば、安定性(リトライ)+トレーサビリティ(ログ)を確保した実務レベルの住所取得処理が実現できます。


