2024年9月6日金曜日

シート関数の紹介だけにしていて、VBAのマクロコードが省かれているのは、マクロで乱用されたくないからじゃないのか ー ExcelAPI(VBAマクロ)

          
住所録などで、住所から検索して郵便番号を自動で入力したい場合があります。
しかし、これは郵便番号から住所を得る場合よりも、かなり難易度が高いんだ。

国内の住所だと、単純に自治体名、町内名、番地、枝番と続くのなら簡単です。
ですが、どれもシンプルな分けではなく、町が複数回あったり、郡まであるな。

果ては、大字があったり、京都なら上る、下る、東入ルと複雑怪奇で理解不能。
こうして、様々な住所の書き方があるのも、日本に長い歴史があるからだろう。

まあ、そんな住所からネット経由で郵便番号を自動的に取得出来たら便利だな。
なので、ここは”ExcelAPI”を使って、WEBから情報を引っ張り出すとしよう。

先ず、”Excel 2013”以降のエクセルが必要で、使うのは”WEBSERVICE関数”。
シート関数として準備されているので、辞書、翻訳となんでもござれらしいよ。

そこで、郵便番号を取得するには、関連するシート関数を二個使う必要がある。
一つは、”EncodeURL”で、WEBで検索するために文字列を16進数に変換する。
次に、”WebService”関数で、変換するURL先に16進数文字列を付けて検索だ。
ただ、ネットでは、関数をワークシート上に記述する方法しか紹介していない。

これをVBA上のコードに転用するなら、”WorksheetFunction”で指定します。
まあ、このコードを紹介する人もネットでいなかったので、やってみました。

Sub ChrctrStrng() '郵便番号を表示する列を文字列にしておく
Columns(2).NumberFormatLocal = "@" 
End Sub

Sub ZIPFind() '郵便番号を取得するコード
Dim i As Long, Strng As String, Strng2 As String
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
Strng = ""
Strng = Strng & Range("A" & i).Value
Strng = Strng & ""
Strng2 = WorksheetFunction.EncodeURL(Strng)
Range("B" & i).Value = WorksheetFunction.WebService("http://api.excelapi.org/post/zipcode?address=" & Strng2)
Next i
End Sub

コードの前提としましては、A列の2行目から住所一覧が書き出されています。
次に、B列に郵便番号を出力しますが、その前に文字列の16進数変換が入るな。

それをシンプルに書き出しただけなので、トライしたい人はやってみてたもれ。
ただ、 一日のアクセス数制限で百件まで無料なので、個人向け用途でしょう。

それ以上の数で逍遥に使うのなら、月額千円とお安いので使ってみる手はある。
というわけで、郵政公社が公開している郵便番号データは、あまり使えません。

CSVファイルでも10メガバイト以上とデータがバカでかく、しかも、郵便番号データにある先頭部分の「0」が消えないように文字列としてエクセルに読み込む作業も必要だったりとややこしいので、ここはネットで検索して取得する方が楽だなと思ったのでした。



いいねと思ったら、三つポチっとね!
にほんブログ村 スキースノボーブログへにほんブログ村 スキースノボーブログ スキーへにほんブログ村 旅行ブログ 旅日記・旅の思い出へ
にほんブログ村    にほんブログ村      にほんブログ村 



0 件のコメント:

コメントを投稿