VBAで
・郵便番号から住所を取得
できます!
※郵便番号に紐づく住所が複数ある場合、複数の住所を取得できます。
VBAから
・郵便局のWebサイトへHTTPリクエストをして
・HTTPレスポンスから住所を抜き出す
ことで取得します!
※Web APIは使用しません。
VBAコード
ここでは例として
・郵便番号「1000001」の住所を取得
します。
※郵便番号「1000001」の住所は「東京都千代田区千代田」です。
Option Explicit
Sub sample()
Dim url As String
Dim zip As String
Dim httpReq As Object
Dim httpDoc As Object
Dim tables As Object
Dim table As Object
Dim data As Object
Dim line As Object
Dim State As String
Dim city As String
Dim addressLine As String
Dim resultAddress As String
'URL
url = "https://www.post.japanpost.jp/cgi-zip/zipcode.php?zip="
'郵便番号
zip = "1000001" '紐付く住所が1件の郵便番号
'zip = "5110851" '紐付く住所が2件の郵便番号
'HTTPリクエスト実行
Set httpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
httpReq.Open "GET", url & zip, False
httpReq.Send
'「HTMLDocumentオブジェクト」にHTTPレスポンスを設定
Set httpDoc = CreateObject("htmlfile")
httpDoc.body.innerHTML = httpReq.responseText
'検索結果を取得
'※「table」タグのデータを取得(複数ある場合あり)
Set tables = httpDoc.getElementsByTagName("table")
'検索結果(tables)の件数分繰り返し
For Each table In tables
'都道府県と市区を抜き出す
Set data = table.getElementsByClassName("data")
State = data(1).innerText
city = data(2).innerText
'町村を抜き出す
Set line = table.getElementsByClassName("line")
addressLine = line(0).innerText
'抜き出した結果を連結
resultAddress = resultAddress & State & city & addressLine & vbCrLf
Next
'結果
MsgBox (resultAddress)
'後片づけ
Set httpReq = Nothing
Set httpDoc = Nothing
End Sub
実行結果
郵便番号から住所を取得できました。
※郵便番号「1000001」から住所である「東京都千代田区千代田」を取得できました。
参考①
郵便局の「郵便番号検索ページ」は以下です。
参考②
上記で使用した以下の詳細は、公式サイトをご確認ください。
●「WinhttpRequestオブジェクト」の「Open」メソッド
●「WinhttpRequestオブジェクト」の「Send」メソッド
●「HTMLDocumentオブジェクト」について
※公式オンラインマニュアル上に、当該ページは見つかりませんでした。