webサービスAPIを使って、セルに入力された郵便番号を基に住所を表示するユーザー定義関数のサンプルプログラムです。
例えば、A1のセルに"1638001"と入力したら隣のセルに"東京都新宿区西新宿2丁目8-1"と表示する関数です。
郵便番号に"-"(ハイフン)が含まれていても動作するようになっています。
AccessのVBAでも使用できます。
作成したユーザー定義関数について
Accessには、もともと郵便番号から住所に変換する機能があるし、ExcelにもMicrosoftが公式に配布しているアドイン「Excel アドイン: 郵便番号変換ウィザード (2000-2007 ユーザー用)」があるけど、アドインがなくてもインターネットに接続できる環境下であれば動作します。
逆を言えば、インターネットに常時つながっている環境じゃないと動作しないので注意してください。
他の人に使わせる場合に、アドインダウンロードさせたり、アドインの説明めんどくさいなーとか思ってる人は使ってみてください。
ちなみにこのサンプルはAccessでも使えます。
以下Excel VBAのサンプルプログラム説明。
サンプルプログラムで使用されているwebサービスAPIについて
VBAのサンプルプログラムの説明の前に、このサンプルプログラムで使用されているwebサービスAPIについて少し説明しておきます。
使用しているwebサービスAPIは、「郵便番号検索API」を使っています。
APIの仕様や注意点などは、「郵便番号検索API」を参照してください。
利用にあたっては必ずサイトの内容を一通り読んでおいてください。
特に利用規約については必ず一読しておいてください。
メールアドレスを登録すれば、制限や重要な仕様変更等について事前にご連絡してもらえるようです。
つーか、日本郵便でこういうAPI作ってくれたらいいのに。
ユーザー定義関数のサンプルプログラムの作成手順
webサービスAPIを使用して郵便番号から住所に変換するにユーザー定義関数の作成手順を以下に記載します。
Excelの[ツール]メニューから[マクロ]をポイントし、[Visual Basic Editor]をクリックする。
[Visual Basic Editor]が起動するので、[挿入]メニューから[標準モジュール]をクリックする。
標準モジュールに以下のコードをコピーして貼り付ける。
Function ZipCodeToAddress(strZipcode)
Dim objXMLHttp As Object, zipArr
'"-"ハイフンが入っていた場合は取り除く
strZipcode = Replace(strZipcode, "-", "")
Set objXMLHttp = CreateObject("MSXML2.XMLHTTP")
objXMLHttp.Open "GET", "http://zip.cgis.biz/csv/zip.php?zn=" & strZipcode, False
objXMLHttp.Send
'APIの結果を配列に代入する
zipArr = Split(Replace(objXMLHttp.responseText, """", ""), ",")
'正常な値が返ってきた場合は配列の要素数が15になる
If UBound(zipArr) = 15 Then
ZipCodeToAddress = zipArr(12) & zipArr(13) & zipArr(14)
Else
'郵便番号が間違っている場合や未入力の場合は、空文字を返す
ZipCodeToAddress = ""
End If
End Function
ユーザー定義関数の作成はこれで終了。
実際の使い方として、郵便番号が入力されるセルを"A1"として、住所を表示したいセルが"B1"だった場合は、"B1"セルに以下のように入力する。
=ZipCodeToAddress(A1)
以上。
次の記事にこの関数を応用して、関数の結果として住所を表示するのではなく、特定のセルに郵便番号が入力されたら、値としてセルに住所を入力するサンプルを作成する予定。
コメント
業務で受注管理が急務となり、限られた時間内にExcelのフォームを作成することになりました。
データの入力自体は、他の人に委託するため、色々と設定を必要としないシンプルなものを作成したいと考えています。
フォーム上の郵便番号入力専用テキストボックスに郵便番号を入力すると、住所表示用テキストボックスに住所が自動表示される様にするには、「webサービスAPIを使って入力された郵便番号から住所に変換する関数のサンプル」をどのように応用すればよろしいでしょうか。
(具体的な記述など教えていただけたら幸いです。)
どうぞよろしくお願いします。
ごめんなさい、コメント今日見ました。
仕事が忙しくてブログ自体にログオンしてなくって。
フォームでやりたいなら、ユーザー定義関数の引数に郵便番号を入力するテキストボックス名を指定して、帰ってきた値を住所を変更したいテキストボックスに代入するようにすればいいです。
例えば、郵便番号を入力するテキストボックスが”txtZip”だとして、住所を表示したいテキストボックスが”txtAddr”だったとすると、
txtZipのAfterUpdateイベントにこんな感じで記述すればよいです。
Private Sub txtZip_AfterUpdate()
Me.txtAddr = ZipCodeToAddress(Me.txtZip)
End Sub
今更返事しても遅かったかもしれないですね。
ごめんなさいね。