• ベストアンサー
  • 困ってます

accessのnot検索

access2000で テーブル[日付](yyyy/mm/ddで入力されています)  [内容](なんでも。空白の場合もあります) フォーム  「日付」(yyyy/mm/ddのみ入力可能にしています)  「NGword」(どんな文字でも入力できます) という項目を作成し・・・ 1、クエリでフォームの「日付」に入力したものかつ 2、フォームの「NGWord」を含まないレコードのみを抽出したいのですがうまくいきません。 「日付」「NGword」が空白の場合は入力された条件のみ適用させたいです。 (「日付」・「NGWord」が両方空の場合は全レコード抽出したいです) クエリを作成して・・・ [日付]の抽出条件を like "*" & forms![フォーム名]![日付] & "*" で [内容]の抽出条件を (not like "*" & forms![フォーム名]![NGword] & "*") or (is null) で設定したのですがうまくいきませんでした・・・泣 宜しくお願いします。

共感・応援の気持ちを伝えよう!

  • 回答数2
  • 閲覧数245
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1
  • ja7awu
  • ベストアンサー率62% (292/464)

クエリの新規フィールドに次の2フィールドを設定します。 式1: IIf(IsNull([forms]![フォーム名]![日付]),True,[日付]=[forms]![フォーム名]![日付]) 式2: IIf(IsNull([forms]![フォーム名]![NGword]),True,Not ([内容] Like "*" & [forms]![フォーム名]![NGword] & "*")) いずれも「抽出条件」欄には、True を指定し、非表示にします。 [日付] と [内容]の「抽出条件」欄には、何も指定しません。 以上でご希望どおりの抽出が、出来ると思います。 なお、余分なこととは思いますが、状況によっては、フォームの内容変更した時、 更新後イベント等で Requery が必要な場合があります。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

助かりました!! お陰でうまく抽出することができました。 また何かありましたら宜しくお願いします。

関連するQ&A

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • Access2007で同月同日を抽出

    ある(*.accdb)のクエリーで日付の所に Like"*/"&Format(date(),"mm/dd") と書いて本日と同じ同月同日を抽出していますが本日ではなく任意の yyyy/mm/ddをあるレコード欄に入力したらその日付の同月同日を抽出するにはクエリーにどの様に書けばよいのか教えてください。

  • ACCESS日付形式について質問です。

    日付抽出条件を含んだフォームを作成したのですが、午前中までyyyy/mm/ddの形式で入力し、抽出できたのですが、今mm/ddの形式で入力しないと抽出できなくなりました。 変更をした覚えはないのですが・・・ yyyy/mm/ddで抽出できる方法を教えてください。 おねがいします。

その他の回答 (1)

  • 回答No.2
noname#102878

ちょっと読みづらいんですが・・・ 【状況】 1. TableAにFieldA(文字列型)とFieldB(文字列型)がある 2. 非連結型のFormAというフォームがある。 3. FormAには、txtAとtxtBという2つのテキストボックスがある。 【検索要件】 1. txtAに入力されたキーワードを含み、かつ、txtBに入力されたキーワードを含まないレコードセットを取得したい。 2. txtAとtxtBの片方のみ入力された場合は、入力された条件のみでレコードセットを取得したい。 3. txtAとtxtBの両方が空っぽの場合は全件取得したい。 【問題点】 1つのクエリで、これら動的な条件に対応したいのだがうまくいかない。 ってことですよね? 手早く簡単に済ませるならVBAからSQL文字列を使ってADOで検索を掛ける方法です。 クエリの検索結果をどのように利用したいのかわからないのですが、とりあえず一覧表示フォームでも単票フォームでもレポートでも大丈夫でしょう。 標準モジュールにグローバル変数を定義します。 標準モジュールに以下を書いてください。 -------------------------------------- Public gstrSQL As String ' 検索するためのSQL文 Public gcstrSQL As String = "SELECT * FROM TableA;" ' gstrSQLにSQL文が設定されていない場合の全件検索用SQL文字列定数 -------------------------------------- 次に、FormA上のコマンドボタンcmdFindのクリックイベントプロシージャに書いてください。 -------------------------------------- Private Sub cmdFind_Click() Dim strSQL As String Dim strWhere(1) As String Dim i As Long Dim j As Long strSQL = "SELECT * FROM TableA " If (IsNull(Me.txtA.Value)) Or (Len(Me.txtA.Value) = 0) Then Else strWhere(i) = "(FieldA Like '*" & Me.txtA.Value & "*') " i = i + 1 End If If (IsNull(Me.txtB.Value)) Or (Len(Me.txtB.Value) = 0) Then Else strWhere(i) = "(FieldB Not Like '*" & Me.txtB.Value & "*') " i = i + 1 End If If i >=1 Then strSQL = strSQL & "WHERE " For j = 0 To i - 1 strSQL = strSQL & strWhere(j) & "AND " Next j strSQL = Left$(strSQL, Len(strSQL) - 4) End If strSQL = strSQL & ";" gstrSQL = strSQL End Sub -------------------------------------- で、一覧表示のためのFormBで検索結果を開きたいのであれば、FormBのOpenイベントプロシージャに以下を書いてください。 -------------------------------------- Private Sub Form_Open(Cancel As Integer) If Len(gstrSQL) >= 1 Then Me.RecordSource = gstrSQL Else Me.RecordSource = gcstrSQL End If End Sub -------------------------------------- これで、FormBのレコードソースプロパティへの設定が済みますので、FormB上の各テキストボックスにTableAの値を表示することができます。 ただし、FormBのデザイン時に「レコードソース」プロパティへ「TableA」を設定し、各テキストボックスの「コントロールソース」プロパティにはTableAの各フィールド名を設定しておいてください。 (レコードソースが空っぽのままだとコントロールソースを設定できないので。レコードソースは実行時に書き換えられるので大丈夫です。) 対象がレポートの場合でもOpenイベントに書けばOKです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

確かにちょっと質問が読みづらいですね・・・反省します。 回答ありがとうございます。 今回は下の方の案でやらせていただきましたが 興味深い回答ありがとうございました。 またなにかありましたら宜しくお願いします。

関連するQ&A

  • ACCESS フォームで入力した日付をクエリで読み

    ACCESS フォームで入力した日付をクエリで読み替えたい ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい フォーム テキスト名:日付にyyyymmdd で入力します クエリ テキスト名:日付はパラメータとして使用しています クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。 Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終] フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか? ちなみに、以下の式を入れたらエラーです。 Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。 どなたか助けてください。お願い致します。

  • Accessで日付を抽出するパラメータを設定したい

    Accessのクエリで日付に対して与えているパラメータがあります。 パラメータで指定したいデータはフォームのテキストに入力した日の23:59:59 以降の日付を抽出したい。 入力:数値8桁(yyyymmdd)で行う 抽出先テーブルのデータ:yyyy/mm/dd hh:mm:ss 現在以下のパラメータを日付に対して与えると「式が複雑すぎます、、、」と注意されてしまいます。 指定日の23:59:59を抽出範囲として指定するのはどうしたらよいでしょうか? 入力値の変換も含めて、以下のパラメータを入れています。 「+"23:59:59"」をとればエラーは出ません。 <=IIF(Len([Forms]![フォーム名]![日付])=8,CDate(Format([Forms]![フォーム名]![日付],"@@@@/@@/@@")),#9999/1/01#)+"23:59:59" どなたか、お助け下さい。よろしくお願い致します。

  • Accessであいまい検索するフォームをつくってみたんですが?

    Accessの初心者です。 本などをみながらあいまい検索ができるようなフォームをつくってみましたがフォームを開いた時、全レコードが表示されてしまいます。 クエリーの抽出条件はLike "*" & Forms!フォーム1!テキスト0 & "*"にしてテキストボックスプロパティの更新後処理でDoCmd.Requeryとしました。(意味がよくわからないんですけど) フォームを開いた時やテキストボックスになにも入力されていない時、全レコードが表示されないようにするにはどうすればいいのでしょうか? よろしくお願いします。

  • Access 日付/時間型を検索するには?

    いつもお世話になっております。 色々と調べたのですが、データが思い通りにならなく困っております。 検索用フォームを作成し、番号と件名であいまい検索出来るようにしたのですが、年月日でも検索出来るように依頼されました。 自分なりに組んでみたのですが、検索機能が動いてくれませんでした。 年月日のデータ形式は「日付/時刻型」で、格納されているデータは「yyyy/mm/dd 00:00:00」となっています。 日付のみで検索すれば良いのですが、いくら検索しても、全データが抽出されてしまいます。 どこが悪いのかご指摘お願い致します。 ☆クエリ☆ ・Q処理検索 左から「処理番号」「件名」「年月日」となっており、 「処理番号」と「件名」の抽出条件(1行目)には 「Like"*"&[Forms]![F処理検索]![処理番号]&"*"」 「Like"*"&[Forms]![F処理検索]![件名]&"*"」と記述 「年月日」の抽出条件に 「Between[Forms]![F処理検索]![開始]and[Forms]![F処理検索]![終了]」を2行目に記述 「>=[Forms]![F処理検索]![開始]」を3行目に記述してあります。 ☆フォーム☆ ・F処理検索 年月日は2つテキストボックスを用意しています。 各々に「開始」と「終了」の名前をつけ、定型入力を「0000/00/00\ 00:00:00;0;_」としてあります。 検索実行ボタンをクリックし、詳細検索表示フォームを表示します。 ・詳細検索表示 「F詳細検索」の結果をフォームビューで表示させます。 ☆マクロ☆ フォームを開く ・フォーム名:詳細検索表示 ・フィルタ名:Q処理検索 以上、宜しくお願い致します。

  • ACCESSのDate関数について

    会社のDBにACCESSで繋いで必要な資料を作成しています。そのDBの日付の書式がyyyymmddの型になっていて、クエリの抽出条件でdate()と入力しても上手くいきません。そのために、left(date,4)&"/"&mid(date,5,2)&"/"&right(date,2)としてyyyy/mm/ddの型に直して抽出しています。このやり方だとクエリの実行にとても時間がかかります。yyyymmddのままでパラメータを指定して20070630と入力すると10秒かからずに表示されますが、yyyy/mm/ddの型に直してdate()にすると3分近くかかります。yyyymmddのままでdate()を使う方法はありますか?

  • ACCESSでクエリーを使った検索

    VBAを使えば簡単にできるのですが、事情があり、クエリーのみで行わなければいけません。 フォームに入力された情報を元に検索できるクエリを作成しました。 通常でしたらクエリのフィールド名の下の抽出条件に Forms![F_検索]![検索条件1] とすればいいのですが、これが複数の条件を設定した場合はすべての条件を入力しないと、検索結果が出ないことから 以下のように変更しました。 フィールド名の抽出条件には何も書かず、別に式として IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=[Forms!]![F_検索]![検索条件1])) と入力しそこの抽出条件に「True」と入力しました。 これで何も入力されてない場合は全件が表示されるようになりました。 通常の検索はこれでいいのですが疑問点が2点あります。 1.期間を抽出する場合はどうしたらいいのか? IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=Between [Forms!]![F_検索]![検索条件1] and [Forms!]![F_検索]![検索条件2])) とかしてみましたがダメでした。 2.あいまい検索をするにはどうしたらいいのか? IIf(IsNull(Forms![F_検索]![検索条件1],True,[フィールド1]=Like [Forms!]![F_検索]![検索条件1])) なんてしてみましたがだめでした。 ご回答よろしくお願いします。

  • accessで空白の時の抽出

    access2000を使っています。まだ初心者なので難しい事はできないのですが、クエリを使って絞り込み検索のフォームを作っています。 テーブル内のデータで空白のデータがあります。その際にクエリの抽出条件にlike iif(is null([forms]![formA]![テキスト100]),"*","*"&[forms]![formA]![テキスト100]&"*")としています。フォームのテキストが空白のときは全て抽出するという条件を満たす予定で設定したのですが、テーブル内のデータが空白の物が抽出できません。データが空白がない様にすればいいのでしょうが、クエリの条件で設定できないものでしょうか?データはテキスト型です。

  • Accessでデータベースを作っています。

    Accessでデータベースを作っています。 先日、こちらで質問をさせていただいて、クエリで複数のフィールドを対象にデータを検索する ことはクリアできました。 ありがとうございました。 ご指導に基づき、4つのフィールド(仮にA,B,C,D)について、クエリの抽出条件に  Like "*" & [Aを入力] & "*"  Like "*" & [Bを入力] & "*" ・・・ とそれぞれ設定してパラメータ入力を求め、4つの条件すべて、または一部のみ設定して検索し、 正しい検索結果が得られました。 今度は、検索用のフォームを作成し、フォームで入力した条件をクエリに送って、同じ結果を 得たいと思うのですが、以下の方法では正しい検索結果が出てきません。 ・フォームに検索用のボックスをA~Dまで4つ作成(ひとつはコンボボックス、あとはテキスト) ・クエリの抽出条件に、それぞれ以下を入力     Like "*" & [Forms]![Q_form(作成したフォームの名前)]!                       [A(それぞれの検索ボックスの名前)] & "*" ・フォームに「クエリの実行」のコマンドボタンを配置 パラメータで入力する代わりにフォームを使いたい、というものなのですが(パラメータ入力 よりも、コンボボックスを使って値を選ぶ方が検索する人には使いやすいかと思って)、どうしたら うまいこといきますでしょうか。。 教えてください。

  • Accessの検索フォームで。

    Accessを使ってデータベースを作成しています。 「テーブル1」があり、これには 名前ID 名前 入力日 チェック項目1 チェック項目2   : とあります。 これをもとに「検索クエリ」を作成しました。 検索クエリの項目は「テーブル1」とまったく同じですが、 すべてを検索するわけではないので ・名前ID  「検索項目なし」 ・名前  「Like IIf(IsNull([Forms]![検索条件入力フォーム]![名前]),[氏名],'*' & [Forms]![検索条件入力フォーム]![名前] & '*') ・入力日  「検索項目なし」 ・チェック項目1  「Like IIf(IsNull([Forms]![検索条件入力フォーム]![チェック項目1]),[チェック項目1],[Forms]![検索条件入力フォーム]![チェック項目1])」 ・チェック項目2  ※上記と同じ。   : としてあります。 この「検索クエリ」をもとに「検索条件入力フォーム」を作成してあります。 名前の欄に「田中」と入力すれば、「田中」がつく人がすべて検索されるというようなカンジになっています。 「テーブル1」に空欄があり、その場合に、検索がうまくいきません。 「検索クエリ」のところですべてに条件を入れればいいのですが、フォームに全てが入っていないので。。。 やはりフォームに「テーブル1」の項目すべてを含め、クエリで条件を入れるべきでしょうか? これが今考えている中では一番手早いようなカンジがするのですが、どうしてもあまりスマートなやり方ではないような気がして。。。 これしかないのであれば、これでやりますが、他にいい方法があれば、教えていただけないでしょうか? あまり上手な文章ではないので、補足要求があれば補足します。 宜しくお願いします。 Ac2000です。

  • Access2013で翌日のデータのみのクエリ

    お世話になります。 Access2013を使用しており、2つの日付フィールドを比較して 翌日のレコードのみ抜き出したい場合のクエリについて質問で ございます。 日付Aフィールド と 日付Bフィールドが あり、それぞれ日付と時刻が書式yyyy/mm/dd hhmmss で格納されております。 このうち、クエリで抽出したいのは、 日付Bフィールドに格納されている、 日付Aフィールドの翌日のレコードのみを 抽出したいです。 その際、時刻(hhmmss)は無視して翌日のレコードを 抽出したいです。 例えば、 日付Aフィールドに 2016/08/24 15:00:00 2016/08/24 16:00:00 2016/08/24 17:00:00 というデータが格納されていて、 日付Bフィールドに 2016/08/25 00:00:00 2016/08/25 17:00:00 2016/08/26 00:00:00 というデータが格納されていた場合、 日付Bフィールドの 2016/08/25 00:00:00 2016/08/25 17:00:00 のみ抽出したいです。 この場合のクエリの設定方法を教えてください。 どうぞ宜しくお願いいたします。