Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(指定なし : Access 2016)
サブフォームで複数条件のフィルタをかけたい(and検索で)
投稿日時: 18/02/13 17:07:36
投稿者: hana_brenda

いつもありがとうございます。
フォーム上のテキストボックスに入力し、検索コマンドボタンをクリックすると、サブ
フォームにフィルタがかかるフォームを作成しております。
テキストボックス2つまでand検索できるのですが、3つめ以上が分かりません。
教えて頂けますでしょうか?
 
 
Private Sub コマンド2_Click()
 
 '------------------------------
 ' フォームから抽出条件を取り出す
 
    str工事名 = Me!txt工事名
    str工事種目 = Me!txt工事種目
     str名称 = Me!txt名称
    str形状 = Me!txt形状
    str備 考 = Me!txt備考
 
 '------------------------------
 ' フィルタの式を組み立てる
  
 strCriteria = "工事名 like '*" & str工事名 & "*' and 工事種目 like '*" & str工事種目 & "*'"
  
  
 '------------------------------
' サブフォームにフィルタをかける
 
T_単価表検索のサブフォーム.Form.Filter = strCriteria
T_単価表検索のサブフォーム.Form.FilterOn = True
 
 '------------------------------
 ' フィルタをかけた結果が0件だったらメッセージボックスを表示する
 
If T_単価表検索のサブフォーム.Form.Recordset.RecordCount = 0 Then
 MsgBox "検索条件に該当するデータは見つかりませんでした。"
End If
 '------------------------------
 End Sub
 
 
工事名と工事種目までフィルタがかかりますが、名称、形状、備考等他にもand検索でフィルタをかけたいです。andでつなげると構文エラーになってしまいました。
宜しくお願い致します。

回答
投稿日時: 18/02/13 17:56:59
投稿者: sk

引用:
フォーム上のテキストボックスに入力し、検索コマンドボタンをクリックすると、
サブフォームにフィルタがかかるフォームを作成しております。
テキストボックス2つまでand検索できるのですが、3つめ以上が分かりません。

引用:
str工事名 = Me!txt工事名
str工事種目 = Me!txt工事種目
str名称 = Me!txt名称
str形状 = Me!txt形状
str備 考 = Me!txt備考

引用:
T_単価表検索のサブフォーム.Form.Filter = strCriteria
T_単価表検索のサブフォーム.Form.FilterOn = True

strCriteria = ""
 
With Me
 
    If Nz(![txt工事名], "") <> "" Then
        strCriteria = strCriteria & _
                      " And ([工事名] Like '*" & ![txt工事名] & "*')"
    End If
 
    If Nz(![txt工事種目], "") <> "" Then
        strCriteria = strCriteria & _
                      " And ([工事種目] Like '*" & ![txt工事種目] & "*')"
    End If
 
    If Nz(![txt名称], "") <> "" Then
        strCriteria = strCriteria & _
                      " And ([名称] Like '*" & ![txt名称] & "*')"
    End If
 
    If Nz(![txt形状], "") <> "" Then
        strCriteria = strCriteria & _
                      " And ([形状] Like '*" & ![txt形状] & "*')"
    End If
 
    If Nz(![txt備考], "") <> "" Then
        strCriteria = strCriteria & _
                      " And ([備考] Like '*" & ![txt備考] & "*')"
    End If
 
    '先頭の " And " を取り除く
    strCriteria = Mid(strCriteria, 6)
 
    '変数 strCriteria の値を
    'イミディエイトウィンドウに出力
    Debug.Print strCriteria
 
    With ![T_単価表検索のサブフォーム].Form
        .Filter = strCriteria
        .FilterOn = (strCriteria <> "")
    End With
 
End With
---------------------------------------------------------------------
 
・その非連結テキストボックスに入力された値が
  Null や空文字列ではない場合のみ AND 条件を追記する。
 
・余分な And 演算子はフィルターを実行する直前に取り除く。
 
・最終的に生成された抽出条件式全体を
 デバッグできるようにしておく。

回答
投稿日時: 18/02/13 17:58:48
投稿者: Suzu

引用:
工事名と工事種目までフィルタがかかりますが、名称、形状、備考等他にもand検索でフィルタをかけたいです。andでつなげると構文エラーになってしまいました。

 
その試したコードを提示してみましょうね。
 
まず、クエリの抽出条件に似た条件を入れ、SQLビューに変更するとSQLを見ることができますので
それを、参考に 抽出文を生成してみましょう。

投稿日時: 18/02/16 10:50:17
投稿者: hana_brenda

sk様、ありがとうございます。
検索できるようになりました。不勉強で、理解するのに時間がかかってしまいましたが。
いくつかコンボボックスに変更してみました。
 
Private Sub cmd検索_Click()
 
strCriteria = ""
   
 With Me
  
    If Nz([cbo工事名選択]) Then
         strCriteria = strCriteria & " AND [工事名ID] = " & [cbo工事名選択]
    End If
     
     If Nz([cbo県市町村選択]) Then
         strCriteria = strCriteria & " AND [県市町村ID] = " & [cbo県市町村選択]
    End If
     
     If Nz([cbo課事務所選択]) Then
         strCriteria = strCriteria & " AND [事務所ID] = " & [cbo課事務所選択]
    End If
   
     If Nz(![txt工事名], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([工事名] Like '*" & ![txt工事名] & "*')"
     End If
   
     If Nz(![txt工事種目], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([工事種目] Like '*" & ![txt工事種目] & "*')"
     End If
   
     If Nz(![txt名称], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([名称] Like '*" & ![txt名称] & "*')"
     End If
   
     If Nz(![txt形状], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([形状] Like '*" & ![txt形状] & "*')"
     End If
   
     If Nz(![txt備考], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([備 考] Like '*" & ![txt備考] & "*')"
     End If
   
     If Nz(![txt単価コード], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([単価コード] Like '*" & ![txt単価コード] & "*')"
     End If
   
     If Nz(![txt県市町村], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([県市町村] Like '*" & ![txt県市町村] & "*')"
     End If
   
      If Nz(![txt課事務所], "") <> "" Then
         strCriteria = strCriteria & _
                       " And ([課事務所] Like '*" & ![txt課事務所] & "*')"
     End If
   
     '先頭の " And " を取り除く
    strCriteria = Mid(strCriteria, 6)
   
     '変数 strCriteria の値を
    'イミディエイトウィンドウに出力
    Debug.Print strCriteria
   
     With ![T_単価表検索のサブフォーム].Form
         .Filter = strCriteria
         .FilterOn = (strCriteria <> "")
     End With
   
 End With
 
 
 
 '------------------------------
 ' フィルタをかけた結果が0件だったらメッセージボックスを表示する
 
If T_単価表検索のサブフォーム.Form.Recordset.RecordCount = 0 Then
 MsgBox "検索条件に該当するデータは見つかりませんでした。"
End If
 '------------------------------
 End Sub

投稿日時: 18/02/16 10:52:01
投稿者: hana_brenda

SUZU様、いつもありがとうございます。
 
strCriteria = "工事名 like '*" & str工事名 & "*' and 工事種目 like '*" & str工事種目 & "*'" and 備考 like '*" & str備考 & "*'"
と入力し、構文エラーになってしまいました。
 
教えて頂いた方法試してみます。

回答
投稿日時: 18/02/16 12:53:07
投稿者: Suzu

hana_brenda さんの引用:
strCriteria = "工事名 like '*" & str工事名 & "*' and 工事種目 like '*" & str工事種目 & "*'" and 備考 like '*" & str備考 & "*'"
と入力し、構文エラーになってしまいました。

 
strCriteria = "工事名 like '*" & str工事名 & "*' and 工事種目 like '*" & str工事種目 & "*'" and 備考 like '*" & str備考 & "*'"
 
文字列のつながりで見た時、
シアン の部分、"*'" and 備考 like '*" これ余計ですよね。

トピックに返信