- ベストアンサー
エクセルでドロップダウンリストとオートフィルタ連動
- 商品群が多く、コンボボックスもしくは入力規則のドロップダウンリストを使用して規格と商品種類1-商品種類3を選択しオートフィルターを掛けて必要な情報を抜き出したいと考えています。
- 現在、コンボボックスを使い、コンボボックス1⇒商品種類(商品種類1~3を選択し、コンボボックス2に連動)、コンボボックス2⇒商品名、コンボボックス3⇒規格群まで準備はできています。
- しかし、商品群と規格群のコンボボックスとオートフィルタの連動がうまくいかず、解決策がわかりません。どなたかご指導いただけないでしょうか。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
エクセルVBAを初めて扱うとのことだが、そういうレベルでは無理な課題だろう。 それに仕事の関連をそんな初心者がやってよいものか? もう少しVBA(特にコントロールとフォーム)の勉強と経験を積んで、のち取り組んだらどうですか。 VBAでも、コントロールを使う部分は、中・上級に当たると思う。VBAの本でも、詳しい解説は、コントロールの種類が多いこともあって、VBA本体の解説と別冊になっている例が多い。 数冊(数社)ながら、エクセルVBAのコントロールの(独立1冊の)解説書も出ているが、最近ブームも去って大型書店でないと見られないようだ。 本質問は、コードを作ってくださいと、丸投げもいいところ。 そういうムードと、質問の例から、どうしたい(する)のかがわかりにくいので、1日経っても回答がないのだろうと思う。 ーー (1)コントロールを使うなら、コントロールのイベントの仕組みを使うことになるが、 その痕跡が、質問からは見えない。 (2)アイテム(エントリ、Item)は、選択してもらう候補を、コントトールに表示する中身だが、セットの仕方は A.プログラムの中のコードで定義から B.エクセルの場合セル範囲から(エクセルでコントロールを使いやすくする仕組み) 例 Private Sub UserForm_Initialize() UserForm1.ComboBox1.RowSource = "sheet1!a1:a10" End Sub C。データベースから(SQLなどで検索後の結果からなど)DataSource または配列に下データから などがあると思うが、本件はその区別がはっきりしない。アイテム数はどれぐらいあるのか、他項目と合わせて考える(複数条件の場合)べきなのか。 ーー また質問の意図を(データ例を挙げるだけでなく)文章で説明すべきと思う。 最終的に、どういう風に(アイテムを)したいのか例示するべき。 データ例を挙げているが、だいたい縦1列に並んだデータがあると都合よい。 2次元のデータは、扱いがむつかしい。データ例そのままでは多分むつかしい(常識外)。 もっと本質がわかる(形と中身データを変えた)少数例を挙げて、説明文章を添えて 説明できないか。その後回答を見て自社の例に復元するのは、質問者の仕事で、これができないなら、回答をもらっても生かせない。 >No, 物質名 規格1・・・規格10 商品名1-1・・・商品名1-50 商品名2-1・・・商品2-50・・ 1 鉄 1 ・・・ の部分は、貴社独自のことだろう。常識的に、社員以外のものには、意味がわかるわけがない。 これをどうしようというのか。 なお Comboboxでは複数行(項目)選択できないようだ。 ListBoxは項目を複数選択できる。 ーー 「鉄」の行で、横に列方向を見て、1のある、規格1と商品名1-5?などをコンボのアイテムとして設ければよいのか。 こういうのは、文章で1,2例説明すべきでしょう。 基本的な、コントロールの使い方など勉強して、どう応用したらよいか(多分アイテムをどう定義したらよいか)、考えることだ。 ーー 文句言うばかりでは、と思い、本質問と直接関係ないがコード例を挙げてみる。 ニオイぐらいは嗅げるかもしれない。 ーー 下記イベントプロシージュアーの書くところは判るかな。 下記例は、ユーザーフォームには2つのコンボと1つのコマンドボタンを設けている。 コマンドボタンは、選択をおわえましたという 、トリガーになる。 またパブリック変数について調べて。 Public con1, con2 Private Sub ComboBox1_Click() 'コンボ1で条件1設定 con1 = UserForm1.ComboBox1.Text MsgBox con1 End Sub Private Sub ComboBox2_Click() 'コンボ2で条件2設定 con2 = UserForm1.ComboBox2.Text End Sub Private Sub CommandButton1_Click() 'コマンドボタンをクリックでフィルター実行 'シートに条件があったものが残る。 Worksheets("Sheet1").Range("$A$1:$C16").AutoFilter field:=1, Criteria1:=con1, Operator:=xlOr, field:=2, Criteria2:=con2 End Sub Private Sub UserForm_Initialize() 'ユーザーフォームが最初に表示されるとき行われる作業 ComboBox1.AddItem "aa" ComboBox1.AddItem "bb" ComboBox1.AddItem "cc" ComboBox1.AddItem "dd" ComboBox1.AddItem "ee" ComboBox1.AddItem "ff" '--- ComboBox2.AddItem "x" ComboBox2.AddItem "y" ComboBox2.AddItem "z" ComboBox2.AddItem "u" ComboBox2.AddItem "v" ComboBox2.AddItem "z" ComboBox2.AddItem "k" ComboBox2.AddItem "l" ComboBox2.AddItem "m" End Sub データ例 Sheet1 のA1:C16 品物 属性 数値 aa x 1 aa y 2 aa z 3 bb u 4 bb v 5 cc k 6 cc l 7 dd h 8 dd i 9 dd j 10 ee k 11 ff s 12 ff t 13 ff w 14 aa y 15 ーーー ユーザーフォームの実行で ユーザーフォームが表示される。2個のコンボをそれぞれ選択肢、ボタンをクリック。 主たるフィルタ処理が実行されて、シートに表示される。 品物 属性 数値 aa x 1 aa y 2 aa z 3 aa y 15
お礼
imogasi様 ご指摘ありがとうございます。 確かに、文章的に他の人が見て分かりにくい点が多々あったと思います。 教えていただいたヒントを元に、もう少し考えてみます。