VBA 郵便番号から住所を取得する方法



The following two tabs change content below.
アバター

taka

あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪

どうも、taka(@takabou63)です(^^♪

さて、住所なんかを入力するフォームがあった場合、正直住所の入力って面倒ですよね?

WEB上のフォームなんかだと郵便番号から自動で引っ張ってくれるフォームなんかも存在ます。これをVBAでも作成できないか?

と考えていろいろと調べた結果【WEB API】を使用するのが良いだろうということになりましたので、今回はその方法についてご紹介します(笑)

VBAで郵便番号から住所を取得する方法

さて、今回私が使用したのは【Webサービス by Yahoo! JAPAN】から提供されている【郵便番号検索API】です。

正直に言うと別サイトの【郵便番号検索API】のほうが扱いやすかったのですが、このAPIを使用した方法は別のサイト様でも解説していたので、ぶっちゃけ導入がめんどくさい【yahooAPI】を使用してみました(;^ω^)

APIの利用登録

まずは今回使用するYahooAPIはヤフーにアプリケーションの登録なんかをしなければいけません、これはYahoo!IDを持っていれば簡単に取得することができますのでこちらから登録して下さい。
※クライアントサイドを選べば良いと思います。

すると赤枠の中に長い英数字が表示されているはずです。今回はこのコードを使用しますのでどこかに控えておいてください。

また、今回はWEB APIを使用していますのでネットに接続状態でないと使用ができません。(Yahooのサーバーから情報を拾うので)

YahooAPIを使った郵便番号から住所を取得する

さて、さっそくですが今回はこのようなフォームを作成しました

フォームにはそれぞれ

  • APIキー(TextBox3)
  • 郵便番号(TextBox1)
  • 住所(TextBox2)

で作成しています。

使用イメージとしてはこのような感じです。下記にサンプルファイルも用意しておきますのでご自由に改変してください。

  • 申し訳ありませんが、APIキーはご自身でご用意ください。
  • 今回使用したAPIの詳しい使用はこちらからご覧ください
  • また、APIの使用についてはYahoo!の規約に遵守するようにお願いします。
Private Sub TextBox1_Change()
TextBox2.Text = yahooAddress(TextBox1.Text)
End Sub

Function yahooAddress(Addresscode)

Dim objHttp As XMLHTTP60
Dim XMLArr As String
Dim start As Long
Dim goal As Long
Set objHttp = New XMLHTTP60
'Set objHttp = CreateObject("MSXML2.XMLHTTP")
     'GETリクエストをヤフーに送る
    objHttp.Open "GET", "https://map.yahooapis.jp/search/zip/V1/zipCodeSearch?query=" & TextBox1.Text & "&appid=" & TextBox3.Text, False
    objHttp.Send
    
    'responseTextでレスポンスを取得
   XMLArr = objHttp.responseText
   
  '①:【住所情報である<Address>】の開始と終了の位置をInStr関数で取得して住所を抜き出す。
  start = InStr(XMLArr, "<Address>")   '【住所情報である<Address>】の開始位置を取得
  goal = InStr(XMLArr, "</Address>")   '【住所情報である<Address>】の終了位置を取得
  
  '②:<Address>がない場合の処理
  If start = 0 Or goal = 0 Then '
   GoTo skip
  End If
      

 '③:①で取得した位置の間の文字をMid関数で抜き出す
      yahooAddress = Mid(XMLArr, start + 9, goal - start - 9)

skip:
Exit Function '
            '郵便番号が間違っている場合は空を返す
                     yahooAddress = ""
End Function

今回のコードはCreateObjetct関数を使用して作成しております。

参照設定で使用したい方は【Microsoft XML, v6.0】を参照設定して変数の宣言を

Dim objHttp As XMLHTTP60
Set objHttp = New XMLHTTP60

と変更してご使用ください

ダウンロード

当サイトの免責事項をお読みになってからお使いください。

フォロー・チャンネル登録お願いします

VBA以外についてのブログはこちら↓

https://yb-log.com/

■Twitterフォロー

■YouTubeチャンネル登録

ファイルやコードの利用、WEBサイトの利用について

サンプルコードなどは当サイトの免責事項をよくお読みになってからお使いください。

Sponsored Link

 

WordPressでブログを始めるなら

WordPress簡単インストール&安心の安定性

レンタルサーバー Xserver

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です