• ベストアンサー

EXCEL VBA のユーザーフォームで絞り込み

ここで質問が出来るほどの実力はないのですが・・・。 EXCELのユーザーフォームにコンボボックスを2つ配置しておいて、ComboBox1では都道府県名を選択できるようにしておき、県名を選択したらComboBox2にその県の市町村名が絞り込まれて選択できるようにしたいと考えています。 エクセルにどのような並びでデータをセットしてどのようなコードを書けば実現できるのかをご教授して頂けないでしょうか? まるまる「おんぶにだっこ」的な質問内容ですがよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

やり方はいくつもあるのですが、とりあえず簡単な方法。 都道府県名のリストと、市町村名のリストをワークシートに書いておく方法です。 まず最初に都道府県名のリストを作成します。 Sheet1(シートはどこでも構いません)の A1 に「東京都」A2 に「栃木県」A3 に「茨城県」と入力します。 (本番では A1 から下に向かって都道府県名を入力していってください。) 全部入力が終わったら A1~A3(47都道府県を入力したのなら A47 まで)を選択し、Excel ツールバーの左端の「名前ボックス」に「都道府県」と入力します。 場所わかるかなぁ・・・多分 A1~A47 を選択した状態だと A1 って表示されてると思います。(数式バーの左です) 次に各市町村のリストを作成します。 B1 に「江東区」B2 に「墨田区」B3 に「足立区」と、B列を下に向かって入力。 C1 に「宇都宮市」C2 に「日光市」C3 に「佐野市」と、C列を下に向かって入力。 D1 に「水戸市」D2 に「日立市」D3 に「鹿嶋市」と、D列を下に向かって入力。 B1~B列の最後に入力したセルまでを選択し、先ほどと同様、名前ボックスに「東京都」と入力。C列に入力した範囲は「栃木県」、D列に入力した範囲は「茨城県」と入力します。 ポイントは、A列に入力した都道府県名と全く同じ文字で名前をつける所です。 ここまでやったことを解説します。 都道府県名を入力し、その入力範囲に名前をつけました。 同じく、各都道府県ごとの市町村名にも都道府県の名前をつけました。 次にユーザーフォームでの作業です。 ユーザーフォームに ComboBox を 2つ準備します。名前はデフォルトのまま ComboBox1 と ComboBox2 とします。 ユーザーフォームに下記のコードを書きます。 Private Sub UserForm_Initialize() Me.ComboBox1.RowSource = "都道府県" Me.ComboBox2.RowSource = "" End Sub Private Sub ComboBox1_Change() Me.ComboBox2.Value = "" Me.ComboBox2.RowSource = Me.ComboBox1.Value End Sub これでユーザーが ComboBox1 で都道府県を選択すると、ComboBox2 には選択した都道府県の市町村リストが配置されます。 ここまでを解説します。 フォームの初期化イベントで ComboBox1 のリストに、シートで「都道府県」という名前がつけられた範囲の値をセットします。 Me.ComboBox1.RowSource = "都道府県" 「都道府県」という名前の範囲は A列に入力した各都道府県名がありますので、ComboBox1 には 47都道府県の名前が表示されます。 さらに ComboBox2 のリストを空っぽにします。 Me.ComboBox2.RowSource = "" フォームの初期状態ではどの都道府県も選択されていないわけですから ComboBox2 は空っぽじゃなくてはいけません。 次に ComboBox1 でどこかの都道府県を選択したときの処理です。 まずは ComboBox2 で選択されている(かもしれない)どこかの市町村名をクリアします。 Me.ComboBox2.Value = "" そして ComboBox1 で選択した都道府県名と同じ名前の市町村名リストを ComboBox2 のリストにセットします。 Me.ComboBox2.RowSource = Me.ComboBox1.Value こんな感じです。

kazh
質問者

お礼

早速の回答ありがとうございます。また、懇切丁寧な説明もして頂いてありがとうございます。希望していたことができました。すごいの一言です。なんか涙が出るくらいうれしい!感謝×2です。 一寸背伸びをしてVBAというものを勉強してみようと思い立ち、とりあえず住所録の入力が簡単に行える仕組みを作ろうと思い、いざ本屋さんやWeb検索をしてみましたがわからずに諦め掛けていました。最後にと思いこちらに投稿したところです。まだ、先があるので解らないことがあったら質問させていただきます。 temtecomai2さん今後もよろしくお願いします。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A