エクセルでドロップダウンリストとオートフィルタ連動

このQ&Aのポイント
  • 商品群が多く、コンボボックスもしくは入力規則のドロップダウンリストを使用して規格と商品種類1-商品種類3を選択しオートフィルターを掛けて必要な情報を抜き出したいと考えています。
  • 現在、コンボボックスを使い、コンボボックス1⇒商品種類(商品種類1~3を選択し、コンボボックス2に連動)、コンボボックス2⇒商品名、コンボボックス3⇒規格群まで準備はできています。
  • しかし、商品群と規格群のコンボボックスとオートフィルタの連動がうまくいかず、解決策がわかりません。どなたかご指導いただけないでしょうか。
回答を見る
  • ベストアンサー

エクセルでドロップダウンリストとオートフィルタ連動

お世話になります。 当方、初めてエクセルのVBAを扱います。 エクセルのバージョンは2010を使用しています。 商品群が多く、コンボボックスもしくは入力規則のドロップダウンリストを 使用して規格と商品種類1-商品種類3を選択しオートフィルターを掛けて 必要な情報を抜き出したいと考えています。 No, 物質名 規格1・・・規格10 商品名1-1・・・商品名1-50 商品名2-1・・・商品2-50・・  1   鉄    1              1   2   鉛         1                 1 3   銅 4  アルミ   1              1 ・   ・ ・   ・ ・   ・ このような表が有ります。 物質名と規格または商品が一致する場所に「1」を掛けています。 また、シートは 入力シート⇒上記表が有る場所 作業シート⇒データ処理上必要な作業をする場所        ※コンボボックスの選択肢を作るうえで入力シートの横並びの状態では難しかったので         縦並びに該当データをリンクして並べました。 検索シート⇒検索結果を表示する場所 の3つを製作済みです。 現在、コンボボックスを使い、  コンボボックス1⇒商品種類(商品種類1~3を選択し、コンボボックス2に連動)  コンボボックス2⇒商品名  コンボボックス3⇒規格群  ここまで準備はできており、 VBAで  Sub 検索() Application.ScreenUpdating = False '入力シートのオートフィルター表示 Worksheets("入力シート").Range("$A$1:$FM$1").AutoFilter field:=1 '検索シート「商品名」及び「規格」の設定内容でオートフィルターソート '検索シートに検索結果をコピー Sheets("入力シート").Range("$A$1").CurrentRegion.Copy Sheets("検索シート").Range("$B$8") '入力シートのオートフィルター解除 Worksheets("入力シート").AutoFilterMode = False まで作成しましたが、商品群と規格群のコンボボックスとオートフィルタの連動がどうやっても解かりません。 どなたか、ご指導して頂けないでしょうか。 よろしくお願いいたします。 

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.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

jyok53
質問者

お礼

imogasi様 ご指摘ありがとうございます。 確かに、文章的に他の人が見て分かりにくい点が多々あったと思います。 教えていただいたヒントを元に、もう少し考えてみます。

関連するQ&A

  • コンボボックスとオートフィルタの連動

    データの件数が増えてきたので、コンボボックスで選択した項目を一発で表示させるマクロを組みたいと思います。 前提は以下の通りです。 Webからの受け売りというか、書かれていた通りにやってみたのですが動作しません。どこが間違っているのでしょうか。 また、他にも方法があるようでしたらお知恵をお貸し下さい。 +++ マクロを実行させたいシートにはA3からK3までの項目があります。 そのうち、B3の項目でフィルタをかけたいです。 1.マクロを実行するシートとは別に「マスター」というシートを作成。 そこにコンボボックスにリンクさせる項目を入力。(A3:A16) セルC1にINDEX関数を置き、(A3:A16)のそれぞれの値を文字に変換。 2.その変換した文字を変数に格納 3.もし、空白を選択してしまったら、マクロから抜ける 4.オートフィルタのセットは、既にセットされていたら一旦解除し再度セット。 5.変数に格納した文字をキーにして、オートフィルタで抽出する。 +++ Sub Combo_AutoFilter() Application.ScreenUpdating = False '変数宣言 Dim 選択項目 As Variant Dim 実行シート名 As Variant '現在のシート名の格納 実行シート名 = ActiveSheet.Name '選択項目の格納 Sheets("マスター").Select 選択項目 = Cells(1, 3) If 選択項目 = Empty Then Sheets(実行シート名).Select Exit Sub End If 'オートフィルタのセット Sheets(実行シート名).Select If ActiveSheet.AutoFilterMode = True Then Selection.AutoFilter Range("A3:K3").Select Selection.AutoFilter Else Range("A3:K3").Select Selection.AutoFilter End If 'オートフィルターで選択 Selection.AutoFilter Field:=2, Criteria1:=選択項目 Range("A3").Select End Sub +++

  • Excelのオートフィルタについて

    Excelのオートフィルタで1400件程度のレコードを処理しています。 フィールド名の横の▼をクリックしたときに出るドロップダウンリストの数は制限があるのでしょうか。 というのは、たとえば商品名で抽出する場合、ある商品名が入力されているにもかかわらず、リストには表示されません。が、オートフィルタオプションのダイアログボックスでその商品名を入力すると抽出できるのです。 もしリストの数を増やしたりできない場合は、毎回オプションで手入力しなければいけないのでしょうか。 正確には数えていませんが,商品名の種類は1000件くらいあると思います。

  • エクセルVBA オートフィルタの選択を元に戻す

    エクセルのVBAで、次のことはできるでしょうか。 ブックの中の3つのシートはオートフィルタが設定してあり、任意で操作し、検索に使っています。(オートフィルタを設定しないしーとが2つあります) ・別のシートにチェンジしたら、チェンジ前のシートがオートフィルタで特定の行だけを表示していたら、オートフィルタを <すべて> に戻して、消えていた行を全て表示させたいのです。(オートフィルタは次回にまた使うので、データ-フィルタ-オートフィルタでオートフィルタ自体を解除してしまうような状態にはしたくありません) ・同じく、上記のことをブックを閉じるときにも実行したいのです。 ちなみに、オートフィルタをかけてあるシートには、以下のコードがあります。 よろしくお願いします。 Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) With Sheets("印刷") .Range("E15:E17").Value = _ Application.Transpose(Cells(Target.Row, 7).Resize(, 3).Value) .Range("AA16").Value = _ Cells(Target.Row, 10).Value .Range("AQ16").Value = _ Cells(Target.Row, 11).Value .Range("AX16").Value = _ Cells(Target.Row, 12).Value End With With Sheets("施設") .Range("C2").Value = _ Cells(Target.Row, 10).Value End With Cancel = True Sheets("施設").Select End Sub

  • オートフィルタを操作するマクロについて

    いつもお世話になっております。 現在オートフィルタを操作するマクロを作成中ですが、うまく動作してくれず、悩んでおります。 「検索画面」シートのA1から文字で検索条件を入力し、その答えを「元データ」のシートでオートフィルタを使って導き出すことをしています。 私が作ったマクロは以下の通りです。 Sub フィルタオプション設定() Dim LastRow As Long, LastColumn As Long Dim myData As Range Dim myCriteria As Range Set myCriteria = Worksheets("検索画面").Range("A1").CurrentRegion Sheets("元データ").Select Selection.AutoFilter Field:=26, Criteria1:=myCriteria, Operator:=xlOr End Sub これですと、「~を含む」という答えがでないのと、複数設定しても最後に入力した文字しか検索をかけないのです。 結局のところ、 (1)複数に加え、 (2)「~を含む」という条件で、 (3)別シートにあるデータをオートフィルタによって操作する マクロをご教示ください! よろしくお願いいたします。

  • エクセルVBA コンボBOXの相互連動

    皆さんこんにちは。 エクセル2013を使用しています。 ネットや本では 地方名>都道府県名>市町村名のような 順にコンボボックスで行う絞り込み検索の方法が たくさん載っています。 コンボボックス1を選択しないとコンボボックス2・3の 選択肢は表示されないようなものです。 ですが、私がやりたいのは どのコンボボックスから選択しても 残りのコンボボックスが連動するものを作りたいのです。 おそらくやりたい事はオートフィルターだ!と思ったので 今、私の知りうる数少ない知識を駆使した結果がこれです。 (1)原本Sheetをコピー→コンボ用Sheetを作成 (2)コンボ用SheetのA~C列を列ごとに重複除去をし  除去した内容をE~F列に記載 (3)E~Fの内容をコンボボックス1~3のコントロールにする (4)コンボボックスのどれかを選択すると  そのコンボボックスのTEXTでオートフィルターがかかる、  原本Sheet対応列を絞り込み (5)コンボ用Sheetを削除 (1)~(5)エンドレス・・・みたいなコードでやりたい事に対応出来ましたが 何しろシートのコピー・削除が何回もあるので 重くて重くてとても使い物にはなりません。 どうにか重くならずに同じような作動をするコードはないでしょうか。 このような感じで原本Sheetは作成されております。 [原本Sheet]     A    B    C 1   駅名  顧客名  店舗名 2   ○    △    □ 3   ○    ▲    ■ 4   ◎    △    □ 5   ◎    ▽    ◇ 6   ●     ▽    ◆

  • 【Excelマクロ】特定のタイミングでオートフィルタ-を解除し、コンボボックスの表示項目を変更するには。

    お教えください。 まずは現状です。 シート1とシート2があります。 シート1上にはコンボボックスがあります。 コンボボックス内の項目を選択すると、シート1内でオートフィルタ-が実行され、選択項目をキーに絞り込まれます。 シート1とシート2はそれぞれ画面上のボタンで行き来できます。 シート2にはコンボボックスはありません。 ここで質問です。 (1)シート1でコンボボックスを利用し、オートフィルタ-を実行したまま状態で、(2)シート2にボタン(ないしは下のタブ)で移動します。(3)さらに再度ボタン(ないしは下のタブ)でシート1に戻るとします。 (1)~(3)の操作を行った時に、シート1のオートフィルタ-を解除し、コンボボックスの表示項目を「すべて表示」という項目に自動変更させる方法はありますでしょうか? 下記がボタン押下時のコードです。 一応ボタンで戻った時にオートフィルタ-は解除できるようになりました。下のタブだと変化なしです。 Sub ボタンA_Click() ' シート1を開く Sheets("シート1").Select End Sub Sub ボタンB_Click() If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If ' シート2を開く Sheets("シート2").Select End Sub 現状ではコンボボックスはそのままで、(タブで戻った時は)オートフィルタ-も変わりません。 どなたかご指南ください。 よろしくお願いします。

  • エクセルのオートフィルターがかかっていたら消すVBA

    いつもお世話になっております。 作業が終了して全てのシートを初期化する場合に、オートフィルターで抽出した状態でデータを消すと、隠れていた部分が残ってしまいます。 もし、そのシートのA1~D1までにフィルターがかかっていたら、フィルターを消す、かかっていなければ、そのままシート全体のデータを消すというマクロはどう書けばよろしいのでしょうか? -例- Sheets("ABC").Select If Range(Cells(1,1),Cells(1,4))にフィルターがかかっていたらThen  フィルターを消す  Cells.ClearContents Else Cells.ClearContents End If こんなことをしたいのですが、伝わりましたでしょうか? よろしくご指南くださいませ。

  • エクセルの連動ドロップダウンリストについて教えてください

    エクセル2003です。 連動したドロップダウンリストを作りたいのですがデータに制約があります。データはsheet2にあり下記のような感じです。 A列       B列     C列 メーカーA  商品名A  価格A メーカーA  商品名B  価格B メーカーB  商品名C  価格C メーカーB  商品名D  価格D このデータをsheet1で使いたいのですが、総数で2000件以上あります。 メーカ数は40以上あります。A1セルでメーカー名を使って1回目の絞り込みをしてB1セルで 商品を選ぶとC1セルにその商品の価格が入るようにしたいのですが、 良い方法を教えてください。 できれば最初にメーカーを選ぶときにドロップダウンリストに重複して 同じメーカー名がでないようにフィルターもしたいです。 あと、データー自体は随時変更するのでデータはどんどん変わっていきます。よろしくお願いいたします。

  • オートフィルタと同じ事をフォームで・・・・

    以下の質問について、至急、回答をください。お願いします。 質問1) 出荷.xlsというBookが存在します。その中に、"出荷リスト"というシートがあり、A列に商品コード、B列に商品名が重複して多数存在します。各列に、オートフィルタをかけ、▼をクリックした時に表示されるリストをフォームのコンボボックスに表示させる方法。 質問2) フォームのコンボボックスに表示された任意の商品コードを選択時に、テキストボックスに選択された、商品コードの商品名を表示させる方法。 ※できれば、コードを記述していただくとありがたいのですが・・・

  • エクセルVBAに関する質問です(オートフィルター)

    下記のようにコマンドボタンをクリックしたら、Nのシートを選択し、B列(Field=2)をO(顧客名)でオートフィルターをかけています。 これでできたと思ったら、オートフィルターをかけ、データがない場合の処理を忘れており、データがない場合は、メッセージボックスで データがありません と表示したいと考えています。 そこで (If Then Else Endif) SubTotal 等を用いればできるかなと思うのですが、VBA素人の私にはできません。どなたかご教示お願いいたします。 Private Sub CommandButton1_Click() Dim N As String N = Range("U6").Value Sheets(N).Select Dim O As String O = Range("V6").Text ActiveSheet.Range("$A$1:$S$154").AutoFilter Field:=2, Criteria1:= _ "=*" & O & "*", Operator:=xlAnd この後印刷をかけています。

専門家に質問してみよう