- ベストアンサー
アクセス2000 二段階絞込み コマンドボタン使用
- はじめて投稿させていただきます、宜しくお願いいたします。アクセスは初心者です。現在はじめてシステムを作っているんですが、1つどうしても上手く出来ないことがあります。
- 二段階(もしくは三段階以上)絞込みを「コマンドボタン」を使用してやりたいんですが、関係するスレをいろいろ探しても「コンボボックス」を利用するやり方の説明はよく見受けられますが、「コマンドボタン」でのやり方のスレを見つけるのに苦労しています。。。
- 具体的には、、、まず、親フォームのテキストボックスの検索条件に「品番」を入力し、それをサブフォームに結果を表示します。次に、テキストボックスで「品名コード」の検索をかけ、二段階に絞込みをし、それをサブフォームに反映させたいのです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>二段階(もしくは三段階以上)絞込みを「コマンドボタン」を使用してやりたいんですが >実は既に下記の5つの条件を設定し、それぞれのコマンドボタンで検索をかけることは出来ています。 >要はここでちゃんと絞込みをしたいのに、それぞれ相互に紐付いていないため、全く絞り込めません。 既にアドバイスがあったように、各条件をAnd演算子でつないでフィルター条件を設定すればできます。 また、コマンドボタンは5つも必要ありません。[検索Cmd1]の1つで十分です。 検索条件の指定方法は、1条件ずつ指定してコマンドボタンをクリックして絞り込むことも、必要な条件全てを1度に指定してクリックすることもできます。 フィルター条件が長くなるので、本来ならば、見やすさを考えて記述方法をもう少し工夫すべきですが、とりあえず下記のコードでいけるのでは? Private Sub 検索Cmd1_Click() Me!生産課マスタSub.Form.FilterOn = True Me!生産課マスタSub.Form.Filter = "[品番] Like '*" & Me!品番検索Txt & "*' And [製品名] Like '*" & Me!製品名検索Txt & "*' And [品名コード] Like '*" & Me!品名コード検索Txt & "*' And [資材メーカー] Like '*" & Me!資材メーカー検索Txt & "*' And [品名] Like '*" & Me!品名検索Txt & "*'" End Sub
その他の回答 (1)
- x0000x
- ベストアンサー率52% (67/127)
Filterに設定する条件を " AND " (前後に空白1文字あり)でつないで複数設定することが可能です。 ご質問内容で条件入力は「品番検索Txt」のみ記載されていますが、 たとえば、「品名コード」、「メーカー」などの検索条件入力フィールドを 「品番検索Txt」と同様にTextBoxで準備します。 →「品名コード検索Txt」「メーカー検索Txt」を追加。 検索ボタンのClickイベントで条件入力がある項目についてFilter条件文字列を 結合し、設定することで複数条件のFilterが可能です。 たとえば、 Private Sub 検索Cmd1_Click() Me!生産課マスタsub.Form.FilterOn = False Me!生産課マスタsub.Form.Filter = Empty Dim strFilter As String strFilter = Empty If Me.品番検索TXT <> Empty Then strFilter = strFilter & " AND [品番] Like '*" & Me.品番検索TXT & "*'" End If If Me.品名コード検索TXT <> Empty Then strFilter = strFilter & " AND [品名コード] Like '*" & Me.品名コード検索TXT & "*'" End If If Me.メーカー検索TXT <> Empty Then strFilter = strFilter & " AND [メーカー] Like '*" & Me.メーカー検索TXT & "*'" End If '条件入力があればFilterを設定する If strFilter <> Empty Then Me!生産課マスタsub.Form.FilterOn = True 'strFilterの先頭の" AND "を除いて設定 Me!生産課マスタsub.Form.Filter = Mid(strFilter, 5, Len(strFilter) - 4) End If End Sub 上記では検索条件の入力がある場合、" AND ~"の様にしています。(ANDの前後に空白1文字あり) Form.Filter の代入時には先頭の" AND "を削除しています。 品番(1997)と品名コード(01)の条件が入力された場合 strFilter=" AND [品番] Like '*1997*' AND [品名コード] Like '*01*'" ですが、 Form.Filter="[品番] Like '*1997*' AND [品名コード] Like '*01*'" になります。 また、各条件は部分一致として例示していますが、 項目によっては完全一致や前方一致でFilterすることも可能です。 お試しを!
補足
早速のご回答ありがとうございました! ただ、私の説明が不足していたようで、もう一度説明させてください。 実は既に下記の5つの条件を設定し、それぞれのコマンドボタンで検索をかけることは出来ています。 下記のプロシージャを用いて、例えば品番「1997」を検索したらサブフォームに「1997」の品番だけが表示され、品名コード「C1997」で検索すると、サブフォームに「C1997」のものだけが羅列します。 ただ、ここで問題なのが、例えば品番「1997」で検索かけたあと、「C1997」を検索すると、品番「1997」の中の「C1997」をヒットさせたいのに、他の品番の「C1997」も一緒に表示されてしますのです。。。 要はここでちゃんと絞込みをしたいのに、それぞれ相互に紐付いていないため、全く絞り込めません。 現行の下記のプロシージャを加工して、絞り込めるプロシージャを改めて提示していただけますでしょうか?(ちなみに、回答者様の提示していただいたプロシージャーを使って試してみましたが、エラーが出てしまいました。。。) ※それぞれにテキストボックスがあり、コマンドボタンもある前提でお願いします。 Private Sub 検索Cmd1_Click() Me!生産課マスタSub.Form.FilterOn = True Me!生産課マスタSub.Form.Filter = "[品番] Like '*" & Me.品番検索Txt & "*'" End Sub Private Sub 検索Cmd2_Click() Me!生産課マスタSub.Form.FilterOn = True Me!生産課マスタSub.Form.Filter = "[製品名] Like '*" & Me.製品名検索Txt & "*'" End Sub Private Sub 検索Cmd3_Click() Me!生産課マスタSub.Form.FilterOn = True Me!生産課マスタSub.Form.Filter = "[品名コード] Like '*" & Me.品名コード検索Txt & "*'" End Sub Private Sub 検索Cmd4_Click() Me!生産課マスタSub.Form.FilterOn = True Me!生産課マスタSub.Form.Filter = "[資材メーカー] Like '*" & Me.資材メーカー検索Txt & "*'" End Sub Private Sub 検索Cmd5_Click() Me!生産課マスタSub.Form.FilterOn = True Me!生産課マスタSub.Form.Filter = "[品名] Like '*" & Me.品名検索Txt & "*'" End Sub 本当に初心者でよくわかっていないのでお手数かけますが、宜しくお願い致します。
お礼
適切なアドバイスありがとうございます!確かにコマンドボタンは1つで十分でした。 ご提示いただいたコードを使ったら上手くいきました!! これで業務が円滑に進みます。本当にありがとうございました。