Microsoft Access 掲示板

クエリでの一致検索とNot検索

7 コメント
views
4 フォロー

初心者の質問で申し訳ありません。
クエリでの一致検索とNot検索につきましてご教授お願いいたします。

テーブル(年度登録)に、フィールド名 年度(数値型)と月(数値型)と氏名(テキスト型)を作成。
検索フォームを作成し、絞り込んだデータをレポートで表示するようにしています。
質問なのですが、年度検索で表示不要な年度があると気が付き、Not条件も一緒に設定することは出来ないものかと考えました。
検索フォームに Not検索用のテキストボックス(年度検索2)を設置して、

指定年度検索:テキストボックス名:年度検索
月検索:テキストボックス名:月検索
除く年度検索:テキストボックス名:年度検索2

クエリに自分なりに設定してみたのですが、一致検索は出来るのですが、Not検索を動作させることができませんでした

Like [Forms]![年度登録]![年度検索] & "*" Or  Not Like [Forms]![年度登録]![年度検索2] & "*"

クエりの抽出条件で 一致検索と Not 検索を同じフィールドで行うことは出来ないのでしょうか
よろしくお願いいたします。

初めまして。
作成: 2020/09/29 (火) 10:50:08
最終更新: 2020/09/29 (火) 10:54:51
通報 ...
1

Likeで指定年度を検索して、除く年度を除外すること自体が矛盾してるのでは?
もしかしてやりたいことは、指定年度から除く年月を除外したいのでしょうか?

2
初めまして。 2020/09/30 (水) 09:54:56 0227b@96e2f >> 1

 ご回答頂き、ありがとうございます。
自分でも変な書き方だと思いました。
月だけを指定して検索すると、複数の年度が表示されるため 除く年度 で指定した年度を除いたものを表示したいです。
ただ、年度指定の検索項目も有効に残しておきたいし・・・・、同じくクエリ内で、一致検索とNot検索ができないのかなぁ・・・などと簡単に考えていました。
変な質問で申し訳ありません。

3

指定年度検索:テキストボックス名:年度検索
月検索:テキストボックス名:月検索
除く年度検索:テキストボックス名:年度検索2

いろいろな場合が考えられますので、それぞれの場合でどのようにしたいのか具体的に説明してください。


入力一か所

指定年度検索: 入力
月検索: 未入力
除く年度検索: 未入力

指定年度検索: 未入力
月検索: 入力
除く年度検索: 未入力

指定年度検索: 未入力
月検索: 未入力
除く年度検索: 入力

指定年度検索: 入力
月検索: 入力
除く年度検索: 未入力


入力二か所

指定年度検索: 入力
月検索: 入力
除く年度検索: 未入力

指定年度検索: 未入力
月検索: 入力
除く年度検索: 入力

指定年度検索: 入力
月検索: 未入力
除く年度検索: 入力
※これは条件として矛盾


すべて入力

指定年度検索: 入力
月検索: 入力
除く年度検索: 入力
※これは条件として矛盾

このすべてに対応しようとするとクエリではかなり式が複雑になりメンテナンス性が悪いです。
VBAでFilterをかける方法の方がシンプルにできますが、VBAの使用は可能ですか。

4
初めまして。 2020/09/30 (水) 11:38:24 0227b@96e2f >> 3

 ご回答頂き、ありがとうございます。

入力1カ所と入力2か所で、条件として矛盾するところは選択しない。と、いうのが希望なのですが、
はじめたばかりで、変な事をおたずねしているような質問で申し訳ありません。

検索フォームの作成というところで、VBAでFilterをかける方法が記載されているのを何度か閲覧致しましたが、レポートに出力するにはこの方法しかない!と思いこんでおりまして、クエリで、フォームのテキストボックスの値を参照してレポートに出力という方法しか行っていませんでした。

VBAでFilterをかける方法を勉強したいです。
どうぞよろしくお願いいたします。

5
hatena 2020/09/30 (水) 12:51:36 修正

レポートのレコードソースには、"年度登録"テーブルを設定します。

コマンドボタン「プレビュー」を配置します。このボタンのクリック時のイベントプロシージャを下記のように記述します。

Private Sub プレビュー_Click()
    Dim strFilter As String
    
    If Not IsNull(Me.年度検索) And Not IsNull(Me.年度検索2) Then
        MsgBox "[指定年度]と[除く年度]を両方入力することはできません!"
        Exit Sub
    End If
    
    If Not IsNull(Me.年度検索) Then
        strFilter = strFilter & " AND 年度=" & Me.年度検索
    End If
    
    If Not IsNull(Me.月検索) Then
        strFilter = strFilter & " AND 月=" & Me.月検索
    End If
    
    If Not IsNull(Me.年度検索2) Then
        strFilter = strFilter & " AND 年度<>" & Me.年度検索2
    End If
    
    strFilter = Mid(strFilter, 6) '先頭の" AND"を削除
    
    
    If DCount("*", "年度登録", strFilter) = 0 Then
        MsgBox "該当するレコードはありません。"
    Else
        DoCmd.OpenReport "レポート名", acViewPreview, , strFilter
    End If

End Sub

OpenReportの第4引数に抽出条件を設定できます。

6
初めまして。 2020/09/30 (水) 14:13:36 0227b@96e2f >> 5

 早々にご回答頂きまして、ありがとうございます。
早速試してみたところ、思うように作動致しました。
今度は、文字列での絞り込みもトライしてみようと思います。

3行目の
If Not IsNull(Me.年度検索) And Not IsNull(Me.年度検索) Then
の二つ目の Me.年度検索を Me.年度検索2 に変更しました。

本当にありがとうございました。

7

あっ、間違ってますね。ご指摘ありがとうございます。
回答を修正しておきます。