郵便番号から住所を取得する! ※全文無料
2年ぐらい前に郵便番号から住所を取得する方法を紹介しました。
郵便局のサイトからデータをダウンロードしてきて、それをvlookupするという方法です。
この方法で十分なのですが、すべての郵便番号をダウンロードするのが面倒ですよね。
必要な分だけにしていると、遠方から引っ越し予定の人の住所が取得できません。
それぐらい手打ちすればいいのですが、完全自動にしたい!!!という気持ちで新しい方法に挑戦しました。
今回はVBAで「GetAddress」関数を作ります。
郵便局が提供するAPIを通して郵便番号から住所を取得します。
「Alt+F11」でVBEを起動し、標準モジュールを追加します。
Option Explicit
Function GetAddress(zipcode As String) As String
Dim apiUrl As String
Dim xmlhttp As Object
Dim json As Object
Dim result As Object
apiUrl = "http://zipcloud.ibsnet.co.jp/api/search?zipcode=" & zipcode
Set xmlhttp = CreateObject("MSXML2.XMLHTTP")
xmlhttp.Open "GET", apiUrl, False
xmlhttp.send
If xmlhttp.Status = 200 Then
Set json = ParseJson(xmlhttp.responseText)
If json("status") = 200 Then
Set result = json("results")(1)
GetAddress = result("address1") & result("address2") & result("address3")
Else
GetAddress = "住所が見つかりませんでした"
End If
Else
GetAddress = "APIへの接続に失敗しました"
End If
End Function
こちらのコードをコピペします。
一応解説すると、
"http://zipcloud.ibsnet.co.jp/api/search?zipcode=【郵便番号】"
でAPIを通して住所のJsonファイルを手に入れられます。
試しに、
http://zipcloud.ibsnet.co.jp/api/search?zipcode=1000001
とすると皇居の住所が手に入ります。
ここまで準備して郵便番号の入ったテーブルに=GetAddress(参照セル)と打ち込んでみると、郵便番号でわかる住所の前半部がゲットできました!
郵便番号が間違っていると#VALUE!になるみたいですね。
もしかしたら、ParseJsonがマークされ「コンパイルエラー sub または Functionが定義されていません」と出るかもしれません。
ParseJson関数はVBAにはデフォルトで含まれていないためです。
JSONを解析するために、JsonConverterを導入する必要があります。
JsonConverter.basを手に入れます
ここにアクセスし、zipファイルをダウンロードし、展開すると、JsonConverter.basが入っているので、これをVBEにドラッグアンドドロップするだけで、使えます。
でも、ここでも「~~~が定義されていません」みたいなエラーが出るかもしれません。
そのときは、VBAエディターで [ツール] > [参照設定] をクリックし、一覧から Microsoft Scripting Runtime にチェックを入れて、[OK] をクリックします。
すると、エラーが解消されるはずです。
……と、ここまでさも自分が考えたかのように書きましたが、実はほとんどchatGPTくんにしてもらったのです。
調べたり寄り道しながらなので、時間はかかりましたが、実質コピペしただけです。
なんて賢いのでしょうか。
以下会話、太字は私です。
最後のPareJsonの部分に対する回答で示されているサイトは404でした。ググってJsonConverter.basを手に入れました。
ほかは、指示に従っただけです。
ちなみに、最初はPowerQueryを使いました。こっちはめちゃくちゃ時間がかかりました。わたしの不理解のためです。
時間をかけたにも関わらず、リアルタイムには住所が取得できないことがわかりました。
努力の成果ですので、おいておきます。
以上です。
※ 本文は以上です。「記事を購入」での応援を歓迎します。応援いただけましたら今回作成したEXCELファイルをプレゼントいたします。
ここから先は
¥ 200
この記事が参加している募集
最後までお読みいただきありがとうございます。「スキ」をしていただけるととても励みになります。