- ベストアンサー
オートフィルタをVBAで表現する方法
- Excelのデータを絞り込むためのオートフィルタをVBAを使ってフォーム上で実現する方法について説明します。絞り込む条件を複数のコンボボックスから選択し、絞り込み後の可視セルの重複しないデータを取得する手順も解説します。
- Excelでデータベースを作成しており、人の登録・削除や指定した人のデータグラフなどを行っています。データを絞り込むためのフォームには10個程度のコンボボックスを配置し、フィルターをかける内容が記載されています。
- オートフィルタをVBAで実現するためには、各コンボボックスの選択内容に基づいて絞り込みを行う処理を実装する必要があります。絞り込んだ後の可視セルの重複しないデータを取得する方法についても触れます。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
>コンボボックスを選ぶと絞込み←ここまでは出来ます >そして、絞り込んだ後の可視セル重複しないデータを取得 ExcelVBAには,「一意のリスト(unique value array)」を生成する機能は実装されていません。 コンボボックスのアップデート毎に,条件に該当する一意のリストをイチイチ拾い直し,下位の(他の)コンボボックスのネタとして設定し直すような具合に丁寧に自作する必要があります。 '初回の一意のリストのセットまでの作成例 private sub UserForm_Initialize() me.combobox1.list = get_unique_and_visible_list(range("A2:A17")) me.combobox2.list = get_unique_and_visible_list(range("B2:B17")) me.combobox3.list = get_unique_and_visible_list(range("C2:C17")) me.combobox4.list = get_unique_and_visible_list(range("D2:D17")) me.combobox5.list = get_unique_and_visible_list(range("E2:E17")) me.combobox6.list = get_unique_and_visible_list(range("F2:F17")) me.combobox7.list = get_unique_and_visible_list(range("G2:G17")) me.combobox8.list = get_unique_and_visible_list(range("H2:H17")) end sub private function Get_Unique_and_Visible_List(byref Target as range) as variant ’指定のセル範囲から可視セルを抽出し一意のリストを返す dim h as range dim myDic as object set mydic = createobject("Scripting.Dictionary") for each h in target.specialcells(xlcelltypevisible) mydic(h.value) = 1 next get_unique_and_visible_list = mydic.keys end function
お礼
回答ありがとうございました! 無事、思い通りのものを作れそうです^^ 一行だけ、分からないのですが、 mydic(h.value) = 1 ここはどういう意味でしょうか? h.valueには、配列の値が入るのかと思いますが、 =1にすることでどのようになるのか分かりません。 暇なときで良いので、回答いただけると嬉しいです。
補足
回答ありがとうございます! すごく短いプログラムで尊敬しますorz プログラムの中身を理解し、分かるようになってから 使ってみたいと思います。 まずは解読からはじめます!