ACCESS2003 追加クエリの条件設定について

このQ&Aのポイント
  • ACCESS2003の追加クエリの条件設定についての質問です。条件設定用のフォームAで指定された条件を元にテーブルBから値を抽出し、テーブルCに書き込む追加クエリを作成しています。
  • フォームAには対象日と月で出力のチェックボックスがあります。テーブルBには試験開始日や試験終了日などの項目フィールドがあります。追加クエリではフォームAの情報を使って試験開始日と試験終了日を条件にデータを抽出しています。
  • 質問者さんはフォームAの月で出力のチェックボックスにチェックがついた場合に、フォームAの対象日の月とテーブルBの試験開始日や試験終了日の月を比較し、同じ月のデータを抽出したいと言っています。しかし、追加クエリの抽出条件を記述してもデータがヒットしないようです。どこに問題があるのか教えていただきたいとのことです。
回答を見る
  • ベストアンサー

ACCESS2003 追加クエリの条件設定について

ACCESS2003 追加クエリの条件設定について 条件設定用のフォーム"A"があり、 その"A"で指定された条件を元にテーブル"B"から値を抽出し、 テーブル"C"に書き込む追加クエリを作成しています。 フォーム"A"には ・「対象日」フィールド ・「月で出力」チェックボックス テーブル"B"には ・「試験開始日」 ・「試験終了日」 ・他多数項目フィールド 追加クエリではフォーム"A"の情報を元に、テーブル"B"から 「試験開始日」:<=[Forms]![F_A]![試験開始日] 「試験終了日」:>=[Forms]![F_A]![試験開始日] と、月をまたがって実施される試験が殆どのため、「対象日」に入力された日付を 網羅するデータを取り出しています。 新たに作りたいのは、フォーム"A"の「月で出力」チェックボックスにチェックがついた 時に、フォーム"A"の「対象日」フィールドから月を取り出し、テーブル"B"の「試験開始日」 「試験終了日」それぞれで月を比較し、同じ月のデータを抽出したいのですが 追加クエリの抽出条件に下記の通り記述した所、データをヒットさせる事が出来ません。 試験開始日フィールドの抽出条件 IIf([Forms]![F_A]![月で出力]=True,Year([試験開始日])=Year([Forms][F_A]![対象日]) And Month([試験開始日])=Month([Forms]![F_A]![対象日]),[試験開始日]<=[Forms]![F_A]![対象日]) 試験終了日フィールドの抽出条件 IIf([Forms]![F_A]![月で出力]=True,Year([試験終了日])=Year([Forms][F_A]![対象日]) And Month([試験終了日])=Month([Forms]![F_A]![対象日]),[試験終了日]>=[Forms]![F_A]![対象日]) どこが問題なのでしょうか… どなたかご教授お願い致します。

  • msn-q
  • お礼率80% (4/5)

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

WHERE句にIIfはあまり使いません。 ([Forms]![F_A]![月で出力] AND Year([試験開始日])=Year([Forms][F_A]![対象日]) AND Month([試験開始日])=Month([Forms]![F_A]![対象日]) AND Year([試験終了日])=Year([Forms][F_A]![対象日]) And Month([試験終了日])=Month([Forms]![F_A]![対象日])) OR ((NOT [Forms]![F_A]![月で出力]) AND [試験開始日]<=[Forms]![F_A]![対象日] AND [試験終了日]>=[Forms]![F_A]![対象日]) これでどうなるでしょう?

msn-q
質問者

お礼

nda23様 ご回答ありがとうございます、またレスが遅くなり申し訳ありません。 頂いた回答を元にやってみました。 が、どうしても0件抽出になってしまいます。 一つずつ追っていくと、[Forms][F_A]![対象日]にMonth、Year関数を使うと 日付/時刻型の基準値「1899/12/30」の値を持ってきてしまっているようです。 [Forms][F_A]![対象日]の書式や定型入力を日付にしても変わらなかった為、 Formatを用いて無理やり"YYYY/MM/DD"型に変換した後、Month・Yearを 当てると正常に月・年が取り出せました。 後、チェックボックスの評価はTrue/False、-1,0でないと反映しないようです。 (NOTでうまく動きませんでした) 結論としまして、追加クエリに フィールド:IIf([[Forms]![F_A]![月で出力]=True,True,[試験開始日]<=[Forms]![F_A]![対象日] 抽出条件:True AND Year([試験開始日]) = Year(Format([Forms]![F_A]![対象日])) AND Month([試験開始日]) = Month(Format([Forms]![F_A]![対象日])) フィールド:IIf([[Forms]![F_A]![月で出力]=True,True,[試験終了日]>=[Forms]![F_A]![対象日] 抽出条件:True AND Year([試験開始日]) = Year(Format([Forms]![F_A]![対象日])) AND Month([試験開始日]) = Month(Format([Forms]![F_A]![対象日])) と二つのフィールドを設けて意図するデータを抽出する事が出来ました。 お手を煩わせましたが何とか出来て良かったです・・・・

関連するQ&A

  • ACCESSでのクエリ抽出条件について

    ACCESS超初心者です。 自分なりに調べたのですが、知識不足によりお手上げ状態です。 クエリの抽出条件について、どなたかご教授いただけますでしょうか? OS:XP ACCESS:2000 ・フォーム上に自由に入力できるテキストを3つ用意します。 ・入力された3つのテキストが1つのフィールドに含まれるものをクエリで抽出したい。 ・3つのテキストが空欄の場合は全てのデータを抽出したい。 ■フォーム上のテキスト  テキスト1:テキスト10  テキスト2:テスト11  テキスト3:テスト12 ■テーブル  フィールド1:問合せ内容(1) ■クエリ内の抽出条件 Like "*" & [Forms]![F_検索テスト]![テキスト10] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト11] & "*" And Like "*" & [Forms]![F_検索テスト]![テスト12] & "*" テキスト名がおかしいのですが、ご了承下さい。

  • ACCESS  クロス集計クエリの抽出条件について

    http://www.accessclub.jp/samplefile/samplefile_39.htm 上記サイトのクロス集計クエリのやり方で、抽出条件を Between [Forms]![フォーム1]![開始日] And [Forms]![フォーム2]![終了日] とする場合、 クエリパラメータダイアログにはどう記述したらよいのでしょうか? [Forms]![フォーム1]![開始日]と[Forms]![フォーム2]![終了日]をそれぞれ別々にテキスト型としてもエラーですし、(「式が複雑です」とのエラー) 条件を全て記述しても、「かっこの使い方が正しくありません。」とのエラーです。 何が間違っているのでしょうか?

  • Access クエリ抽出条件の「Between」の記述で

    こんにちは。Access2000を使用しています。 「抽出条件」フォーム上のテキストボックス "txt開始コード"と"txt終了コード"の入力条件を 「抽出」選択クエリの抽出条件として Between [forms]![抽出条件][txt開始コード] And [forms]![抽出条件][txt終了コード] 記述しました。 抽出条件は「業務データ」テーブルの"業務コード" に対応しており、「業務コード」はテキスト型長さ4 で定義してありますが、「0000」~「9999」の数値 が格納されています。また、フォーム上のテキストボックスの書式は「0000」としています。 条件を何も入力しない時はデータを抽出しますが、条件 を指定すると何も抽出されなくなってしまいます。条件 の指定を、 Between '[forms]![抽出条件][txt開始コード]' And '[forms]![抽出条件][txt終了コード]' のようにシングルクォーテーションで囲んでもうまくいき ません。文字列なのに数値が入っているのでアクセス側で 自動認識しうまくいかないのか、検討がつきません。 どなたか解決策をお願いいたします。

  • 【Access2000】月末の日付を条件にクエリーから抽出する方法

    フォーム[フォーム1]にある[年月日]フィールド(非連結)に入力されたデータをもとにして、そのデータの末日より以前、という条件で抽出を行いたいと思います。クエリーの抽出条件には以下の式を採用しました。 <=DateValue(Year([Forms]![フォーム1].[年月日]) & "/" & (Month([Forms]![フォーム1].[年月日]))+1 & "/" & 1)-1 この式を使用すると、確かに月末は出るのですが、12月の時にエラーになってしまいます。原因も12月で1を足すと、13になるのでおかしくなるのでは?と特定できているのですが、どう回避すれば良いのかわかりません。何か方法がありましたら、お教えくださいませ!!宜しくお願いいたします。 ちなみにOSはWindows2000を使用しています。

  • AccessでBetween条件を含むクエリーで、Between条件を

    AccessでBetween条件を含むクエリーで、Between条件を入力しなくてもデータを抽出するには? Access97でデータの抽出を行いたいと思います。 「顧客名」「商品名」「出荷日」という項目を含むクエリーから、希望のデータを抽出するフォーム(名:検索フォーム)を作成しています。 検索フォームにそれぞれ「顧客名」「商品名」「出荷開始」「出荷終了」という名前の非連結のテキストボックスを作り(規定値を"*"にしています)、それに値を入力すると、これらのテキストボックスの下に配置したサブフォームに抽出されたデータが抽出される様にしたいのです。 現在、クエリーの「顧客名」項目の抽出条件に「[forms]![検索フォーム]![顧客名]」という様に入力し、同じ様な記述を「商品名」項目にも行い(条件は[商品名]としています)、出荷日に「Between[forms]![検索フォーム]![出荷開始]And[forms]![検索フォーム]![出荷終了]」と記述しています。(これらは全てAnd条件にしています) さて、この検索フォームの値入力項目で、全てのテキストボックスに入力しなくても(1つ以上値が入力されていれば)データをサブフォームに抽出できるようにしたいのです。 現在、「出荷開始」&「出荷終了」に値を入力すれば、その他の値(「顧客名」と「商品名」)を入力してもしなくてもデータが抽出できますが、「出荷開始」&「出荷終了」を入力しない限りデータが抽出されません。 この「出荷開始」&「出荷終了」を入力しないケースでもデータが抽出できる様なフォームを作成したいのですが、 どの様に記述を変えたらよいでしょうか?

  • 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のあいまいな条件のクエリ 

    フォームで金額を入力します。 この入力された金額を使ってクエリの条件を作りたいと考えています。 <条件> ・金額が未入力の場合は、全て抽出。 ・金額が入力されている場合は、その金額以上を抽出   (例:1000と入力された場合は、>=1000) 下記のような条件式を入れたら、金額を入力しているにも関わらず、 何も入力されてきませんでした。 IIf(IsNull([Forms]![フォームA]![txt金額]),Like "*",>=Val([Forms]![フォームA]![txt金額]))

  • フォームからクエリの抽出期間を指定するにあたって

    フォームのテキストボックス(開始日付,終了日付)に入力された期間内の レコードをクエリで抽出するために、以下のような抽出条件を設定しています。 Between [Forms]![フォーム1]![from date] And [Forms]![フォーム1]![終了日付] ここまでは問題なく出来ています。 ですが、例えばテキストボックスに何も入力していないときに、 全ての期間から全件表示させるような方法はありませんでしょうか? IIf(IsNull([Forms]![フォーム1]![開始日付]),True,~ というような形で、IIfとIsNullの組み合わせも考えたのですが、 日付は直接フィールドでは無く抽出条件のため、 Trueより後が設定できずに悩んでおります。 出来ればVBAは使いたくないのですが、 何か良い方法はありませんでしょうか?

  • ACCESS クエリの抽出条件

    毎度お世話になります。 クエリをレコードソースとするフォームから、コマンドボタンでアクションクエリを実行するときの抽出条件の書き方を教えて頂けないでしょうか? 二つのテーブル(別のACCESSファイルからリンク)を基にパラメータクエリを作っています。 そのクエリを基にフォームを作っています。 さらに、そのフォームに追加クエリを実行するボタンを置いています。 フォームに表示してあるレコードだけ(パラメータで抽出されたレコードだけ)、他のテーブルに追加しようと思っているのですが、実行ボタンを押すともう一度パラメータが出てきてしまいます。 多分テキストボックスの値を読み取る際にレコードソースがテーブルでないのが問題じゃないかと思うのですが。。。 テーブル:Container / Items クエリ:From_Con(パラメータは[Container]フィールド) フォーム:From_Con(テキストボックス名は[txtContainer]) 追加クエリ:From_Con_App(抽出条件は[Forms]![From_Con]![txtContainer]としてみたがうまく動きません。) デザインビューの抽出条件を使う方法? SQLを使う方法? QueryDefを使う方法? いろいろありそうですが、ネットで検索してもヒットしません。 分かりにくい説明で申し訳ありませんがご教授願います。

  • Access クエリの抽出条件について

    「登録日フォーム」というフォームに 「DTPicker0」というカレンダーのコントロールを設定しました。 これをクエリの抽出条件にしたいのですが、うまくいきません。 現在は [Forms]![登録日フォーム]![DTPicker0] としています。