エクセル関数で郵便番号から住所を求める方法はあります。ただ、使い勝手が完ぺきではないため、注意も必要です。
問題点を考慮して完ぺきを求めるには、マクロが必要になります。
ひとまず、エクセル関数を使用して、郵便番号から住所を求めてみたい方は、こちらを参照してください。
エクセル関数を使用して、住所から郵便番号を検索する方法はこちらを参照してください。
次の項目は、マクロで求める方法になります。
データベースは、郵便局のホームページからダウンロードできるようになっていましたので、そちらをエクセルマクロ有効ブックのシートに貼り付けてあるので、そこから情報を拾っています。
マクロの入っているブックを開き、作業するエクセルブックを開く。作業するエクセルブックで、郵便番号を入力し、そのセルを選択した状態で、「Ctrl」「Shift」「G」を同時に押すと、マクロが起動します。
①郵便番号のセルは、マクロを起動したときのセルのアドレスが自動で入ります。
修正する場合は、エクセルシートの郵便番号が記述されているセルをクリックした後に、
ダイアログの上側の「選択中セル」を選択してください。
②エクセルシートの住所を出力するセルをクリックし、ダイアログの下側の「選択中セル」
をクリックする。
③実行ボタンをクリックする。
郵便番号は、7桁の数値、又は、ハイフンありの表記でも実行されます。
桁数が足りない場合は、先頭に0が入っている場合として、考慮します。
(例)0600000の場合、先頭の0のない、600000となっていても、0600000として検索されます。
但し、郵便番号下4桁の先頭の0は、省略できません。(例)245-53 は検索できません。
郵便番号開始セルから下に向かって、郵便番号検索を行います。
出力する住所の列を指定してから実行をクリックします。
(開始セルの列を住所を出力する列に指定しないでください。)
住所候補が複数ある場合は、ダイアログが表示されます。
「リスト表示をパスする」にチェックをつけてから実行すると、リスト表示が必要な郵便番号検索をパスします。「住所が空白のセルのみ検索」にチェックをつけると、住所データが入っていいない郵便番号を対象に、再検索することができるため、リスト表示が必要な住所だけをまとめて再実行することができます。
セル指定タブでひとつの住所検索して、住所が見つからない場合、「見つかりませんでした。」というダイアログが表示されますが、列指定タブの複数の住所検索を行う場合に、住所が見つからなかった場合は、ダイアログは表示させずに、次に進みます。
下記からダウンロードしたエクセルファイルを起動し、コンテンツの有効化を行う。
マクロの有効化手順については、こちらも参考にしてください。
郵便番号から住所を検索 マクロ有効ファイル(xlsm)のダウンロード
エクセル関数で郵便番号から住所を求めることもできます。ウェブ上からデータを取得するため、オフラインの環境では使用できません。エクセル2013以降に対応されたWEBSERVICE関数を使用するのですが、Excel Onlineでは非対応になります。
エクセル関数を使用するときの問題は、一つの郵便番号に対して、複数の住所が割あたっている場合になります。そのため、一覧になっている郵便番号に対して、一意に住所が決まらず、この候補を入力規則のリストにするためには、別にリストを生成するセル領域を確保する必要があります。
使い方の例です。
A2セルに郵便番号「9300927」と入力しておき、別のセルに下記のエクセル関数を入力すると
=IFERROR(FILTERXML(WEBSERVICE("http://zip.cgis.biz/xml/zip.php?zn="&$A2),"/ZIP_result/ADDRESS_value/value/@state"),"")
該当する都道府県として、「富山県」と表示されます。下記の図では、C2セルに記述しています。
一致数が1の郵便番号のみであれば、この方法で一覧表にすることはできます。一致数が2以上と表示されたセルに条件付き書式を設定しておいて、あとから求める等の手順が必要になります。
郵便番号から住所を検索 エクセル関数版(xlsx)のダウンロード
郵便番号から住所を求めた方法と同様にして、住所から郵便番号を求めることも可能です。
(使用例:)A2セルに住所「神奈川県横浜市戸塚区上矢部町」と入力しておき、
別のセルに下記のエクセル関数を入力すると
=FILTERXML(WEBSERVICE("http://groovelab.asia/zipcode/search.xml?keyword="&$A2),"//count")
検出数として、「5」が表示されますが、一番先頭の郵便番号をひとまず表示させます。
セルのC2には、下記を入力します。
=@INDEX(FILTERXML(WEBSERVICE("http://groovelab.asia/zipcode/search.xml"&"?keyword="&A2),"/response/results/address/item/zipcode"),ROW(A1))
「zipcode」の部分を「ken」に変更すると、県名が取得で、「address1」に変更すると、市区名を取得でき、「address2」に変更すると、町村名が取得できます。確認用に表示方法を記載しています。
上記、画像のように表示させるには、
D2セルに下記を入力し、
=@INDEX(FILTERXML(WEBSERVICE("http://groovelab.asia/zipcode/search.xml"&"?keyword="&$A2),"/response/results/address/item/ken"),1)
E2セルに下記を入力します。
=INDEX(FILTERXML(WEBSERVICE(""http://groovelab.asia/zipcode/search.xml?keyword="&$A2),"/response/results/address/item/addres"),1)
F2セルに下記を入力します。
=INDEX(FILTERXML(WEBSERVICE(""http://groovelab.asia/zipcode/search.xml?keyword="&$A2),"/response/results/address/item/addres2"),1)
注意が必要なのは、上記の図セルB2で検出数が5件と表示される部分です。検出された5件は「上矢部町」「上矢部町690」「上矢部町1968」「上矢部町2384」「上矢部町2336」の5件であり、郵便番号が異なるのですが、確かにすべて「神奈川県横浜市戸塚区上矢部町」を含んでいます。
郵便番号を求めるのに必要な情報が正しく入力できているのであれば、検出された先頭の郵便番号で正しいといえます。
住所の入力不足があると、別の郵便番号となってしまう場合もあるという点を注意する必要があります。