• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:オートフィルターをフォーム(VBA)で表現)

オートフィルタをVBAで表現する方法

このQ&Aのポイント
  • Excelのデータを絞り込むためのオートフィルタをVBAを使ってフォーム上で実現する方法について説明します。絞り込む条件を複数のコンボボックスから選択し、絞り込み後の可視セルの重複しないデータを取得する手順も解説します。
  • Excelでデータベースを作成しており、人の登録・削除や指定した人のデータグラフなどを行っています。データを絞り込むためのフォームには10個程度のコンボボックスを配置し、フィルターをかける内容が記載されています。
  • オートフィルタをVBAで実現するためには、各コンボボックスの選択内容に基づいて絞り込みを行う処理を実装する必要があります。絞り込んだ後の可視セルの重複しないデータを取得する方法についても触れます。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.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

satoron666
質問者

お礼

回答ありがとうございました! 無事、思い通りのものを作れそうです^^ 一行だけ、分からないのですが、 mydic(h.value) = 1 ここはどういう意味でしょうか? h.valueには、配列の値が入るのかと思いますが、 =1にすることでどのようになるのか分かりません。 暇なときで良いので、回答いただけると嬉しいです。

satoron666
質問者

補足

回答ありがとうございます! すごく短いプログラムで尊敬しますorz プログラムの中身を理解し、分かるようになってから 使ってみたいと思います。 まずは解読からはじめます!