![YouTube Social Icon class=](https://static.wixstatic.com/media/a1b09fe8b7f04378a9fe076748ad4a6a.png/v1/fill/w_49,h_49,al_c,q_85,usm_0.66_1.00_0.01/a1b09fe8b7f04378a9fe076748ad4a6a.webp)
Microsoft社は、「郵便番号辞書」のアドインをWeb上で提供しております。それをダウンロードすると、例えばAccessのテーブルでは郵便番号を入力してEnterを押せば、別のフィールドに住所が自動入力されます。リレーショナルデータベース・ソフトであるAccessでは、同様の結果がフォーム上でも実現できます。しかしExcelの場合、アドインが公開されてはいるものの、フォームのテキストボックスでAccess並にこれを利用することは難しいようです。そこで今回は郵政公社のダウンロードデータを利用して、私が「顧客管理名簿」の中で実際に使用している住所変換マクロをご紹介します。Microsoftの郵便番号は更新が不定期(ってゆか、数か月に一度)であるのに対し、郵政公社はさすがに毎月更新しています。
郵便番号ダウンロード http://www.post.japanpost.jp/zipcode/
シートの構成は「検索」「東日本」「西日本」の三つです。全国の郵便番号を1枚のシートに持たせることは無理なので東日本と西日本に分けました。ちなみに、Excel2007以降のエクセルバージョンでは1枚に持つことが可能です。Userformを作り、その上にTextBox2個とCommandButton2個、それとLabelをひとつ配置します。
![シートに配置した住所検索ボタンを押すとUserform1が表示されます。](https://static.wixstatic.com/media/89288b_86ca10981ba84242b0296f30149d9931~mv2.jpg/v1/fill/w_376,h_284,al_c,lg_1,q_80/89288b_86ca10981ba84242b0296f30149d9931~mv2.webp)
シートに配置した住所検索ボタンを押すとUserform1が表示されます。
![](https://static.wixstatic.com/media/89288b_79dfa3785f274a698e55fe4ace69ddbb~mv2.jpg/v1/fill/w_376,h_275,al_c,lg_1,q_80/89288b_79dfa3785f274a698e55fe4ace69ddbb~mv2.webp)
TextBox1に郵便番号を入力し、検索ボタンを押すと。
![TextBox2に、途中までの住所が表示されます。](https://static.wixstatic.com/media/89288b_f9f76d21fce24327bab4dae00846ea00~mv2.jpg/v1/fill/w_376,h_248,al_c,lg_1,q_80/89288b_f9f76d21fce24327bab4dae00846ea00~mv2.webp)
TextBox2に、途中までの住所が表示されます。
![該当する検索値がない場合。](https://static.wixstatic.com/media/89288b_da5c982be78c49b995bb12f3994d5e5c~mv2.jpg/v1/fill/w_380,h_245,al_c,lg_1,q_80/89288b_da5c982be78c49b995bb12f3994d5e5c~mv2.webp)
該当する検索値がない場合。
Userform1のプロシージャ
———————————————————————————————————–
Private Sub CommandButton1_Click()’検索ボタンを押す。
Dim 検索値 As String’変数を宣言。
Dim 検索セル As Range’変数を宣言。
Dim 検索セル2 As Range’変数を宣言。
検索値 = TextBox1.Text’変数「検索値」にTextBox1のテキストを代入。
Application.ScreenUpdating = False’画面を停止。
Worksheets(“東日本”).Visible = True’東日本シートを再表示。
Worksheets(“西日本”).Visible = True’西日本シートを再表示。
Worksheets(“東日本”).Select’東日本シートを選択(省略可)。
With Worksheets(“東日本”)
Set 検索セル = .Range(“A1:A65536”).Find(検索値)
’Range(“A1:A65536”)の該当検索値をオブジェクト変数「検索セル」に代入。
If 検索セル Is Nothing Then’検索セルに該当がない場合。
Worksheets(“西日本”).Select’西日本シートを選択(省略不可)。
With Worksheets(“西日本”)
Set 検索セル2 = Worksheets(“西日本”).Range(“A1:A65536”).Find(検索値)
’Range(“A1:A65536”)の該当検索値をオブジェクト変数検索セル2」に代入。
If 検索セル2 Is Nothing Then’検索セル2に該当がない場合。
Label1.Caption = “検索値は存在しません。”
’ラベルにメッセージを表示。
Else’検索セル2に該当があったら。
TextBox2.Text = Cells(検索セル2.Row, 2)
’該当した検索セル2の2列目をTextBox2に表示。
Label1.Caption = “”’ラベルにメッセージを表示しない。
End If
End With
Else
TextBox2.Text = Worksheets(“東日本”).Cells(検索セル.Row, 2)
’該当した検索セルの2列目をTextBox2に表示。
Label1.Caption = “”’ラベルにメッセージを表示しない。
End If
End With
Worksheets(“東日本”).Visible = False’東日本シートを非表示。
Worksheets(“西日本”).Visible = False’西日本シートを非表示。
Application.ScreenUpdating = True’画面停止を解除。
End Sub
———————————————————————————————————–
サンプルファイルはこちらからダウンロードすることが出来ます。
∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞∞