Microsoft Access 掲示板

複数の検索キーワードで特定の検索キーワードを含まない除外検索(not検索)

5 コメント
views
4 フォロー

お世話になります。
AccsessVBA学習1.5月ほどの者です。

検索フォームを作っており、
↓こちらのスレッドの続きになります。
「、」「。」区切りで複数のキーワードをor検索 and検索
https://zawazawa.jp/ms-access/topic/329

先日上記のスレッドで親切に教えて頂き、
1つのテキストボックスで、
読点[、]区切りで部分一致でor条件
句点[。]区切りで部分一致でand条件
という、複数ワードの条件を切り替える検索が実現できました。

<質問>
もう1つ条件を追加で、
1つのテキストボックスで、
「▲」などの記号区切りで
(not検索)~を含まない除外検索、
の条件を切り替えるような事は可能でしょうか?
(Googleのweb検索などの「-」をつけると除外検索出来るようなイメージ)

<実現したい検索条件>
職名というレコードに
チーフ
SPチーフ
ADチーフ

というレコードがあったとして、
チーフで検索すると、上記全てが表示されますが、
SPのキーワードを除いたレコードを検索表示したいと思っています。

入力テキスト:Me.txtWord3
検索対象フィールド:職名
検索語句例:職名)チーフ▲SP

→職名でチーフ が含まれるレコードのうちで、SP を除いたレコードが検索表示される

<質問-補足>
~を含まない除外検索の場合、抽出条件に
Not Like "  "
というところまでは理解できたのですが、

そもそも実現したいような事が可能なのか、
除外検索用の別のテキストボックスを用意する必要があるのか、
等も含め質問させていただきます。
どのようなコード、方法があるか教えていただけたらありがたいです。

質問ばかりで恐縮ですが、よろしくお願いします。

先日のスレッドのhatena様に教えて頂いた、サンプルコードを記載します。
※読点[、]、句点[。]、記号[▲]区切りが、複数含む検索はしない予定です。

>>>>>>>>サンプルコード>>>>>>>>>>>>>>

Private Sub btnSubmit_Click()

    Dim strFilter As String

    '条件指定3_複数キーワード入力
    '読点[、]区切りで部分一致でor条件 句点[。]区切りで部分一致でand条件)
    If Me.txtWord3 <> "" Then
       Dim strSubFilter As String
       strSubFilter = Me.txtWord3
       strSubFilter = "*" & Replace(strSubFilter, "。", "* And *") & "*"        
       strSubFilter = Replace(strSubFilter, "、", "* Or *")
       strSubFilter = "(" & BuildCriteria("職名", dbText, strSubFilter) & ")"

       strFilter = strFilter & " AND " & strSubFilter
    End If

    '先頭の" AND "を取り除く
    strFilter = Mid(strFilter, 6)

    'フィルター条件の設定
    Me.Filter = strFilter
    'フィルターの実行 (もしくは解除)
    Me.FilterOn = (strFilter <> "")

    'フィルター条件空の場合のメッセージ
    If Me.FilterOn = False Then
    MsgBox "検索条件を入れてください"
    End If

    'フィルター条件空の場合のメッセージ
    If (Me.Recordset.RecordCount = 0) Then
    MsgBox "該当データはありません"
    Cancel = True
    End If

End Sub
keepit
作成: 2020/09/25 (金) 12:23:59
通報 ...
1
kitasue 2020/09/29 (火) 06:28:42 d057a@e9d43
        strSubFilter = Me.txtWord3
        strSubFilter = "*" & Replace(strSubFilter, "。", "* And *") & "*"
        
        If InStr(strSubFilter, "▲") > 0 Then
            strSubFilter = "(" & strSubFilter
        End If
        
        strSubFilter = Replace(strSubFilter, "、", "* Or *")
        strSubFilter = Replace(strSubFilter, "▲", "*) And Not *")
        strSubFilter = "(" & BuildCriteria("職名", dbText, strSubFilter) & ")"

でいかがでしょう。

2

kitasue 様

回答いただき誠にありがとうございます。

コードを使用させて頂きましたところ、
▲後のワードで除外検索が出来ました。

<質問>
大変恐縮ですが追加で質問させていただきます。

下記のように除外ワードを複数指定し検索は可能でしょうか?
(読点[、]でor条件、句点[。]and条件では、
複数ワードを指定出来たのですが、除外検索では難しいでしょうか?)

職名というレコードに
チーフ
SPチーフ
ADチーフ

というレコードがあったとして、
検索語句例:チーフ▲SP▲AD
→職名でチーフ が含まれるレコードのうちで、SP と AD を除いたレコードが検索表示される

※現在のコードで、上記の検索をすると下記のようなエラーmsgが出ました。
「実行時エラー'2435'
指定した式の閉じかっこが多すぎます。」

もし良い案がありましたら、教えて頂けましたら幸いです。

3

kitasue 様

度々のレス失礼します。

別枠で新たに除外検索用に、
txtWord4というテキストボックスを用意し、
除外ワードだけを複数指定するという事は実現できました。

レス2番のように1つのテキストボックスで、
複数の除外ワードを指定する事が、
実現可能でしたらお知恵をお借り出来ましたらありがたいです。
よろしくお願いします。

[▲]区切りで、複数の(not条件)除外検索
    If Not IsNull(Me.txtWord4) Then
        strFilter = strFilter & " AND " & BuildCriteria("職名", dbText, _
        "*" & Replace(StrConv(Me.txtWord4, vbWide), "▲", "* And Not *") & "*")
    End If
4
kitasue 2020/09/29 (火) 17:20:43 d057a@e9d43
        strSubFilter = Me.txtWord3
        strSubFilter = "*" & Replace(strSubFilter, "。", "* And *") & "*"
        strSubFilter = String(UBound(Split(strSubFilter, "▲")), "(") & strSubFilter
        strSubFilter = Replace(strSubFilter, "、", "* Or *")
        strSubFilter = Replace(strSubFilter, "▲", "*) And Not *")
        strSubFilter = "(" & BuildCriteria("職名", dbText, strSubFilter) & ")"

でいかがでしょうか。

5

kitasue 様

ご回答いただき誠にありがとうございます。

コードを使用させて頂きましたところ、
▲後の複数ワードで除外検索が出来ました。

ご親切に教えていただき、本当にありがとうございます。
教えて頂いたコード、勉強させて頂きます