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

Accessを使って日付を比較したい

MSofficeのAccessを使用して日付を比較したいのですが上手くいきません。 テーブル1のフィールドには実施日(日付型)、A期間開始日(日付型)、A期間終了日(日付型)があり データ1は2012/04/20、2012/04/15、2012/05/02 データ2は2012/04/25、2012/04/10、2012/04,23と格納されています。 この実施日がA期間に入るかどうかのチェックを行いたいのです。 クエリに入力した関数は IIf(CDate([テーブル1]![A期間開始日])<=CDate([テーブル1]![実施日])>=CDate([テーブル1]![A期間終了日]),"A期間","範囲外") と命令を書きました。 実行させるとデータ1、データ2とも期間外が返されました。 実際、返して欲しいデータはデータ1はA期間、データ2は期間外と表示したいのです。 環境はWindows XP profissional、アクセスは2002 SP3です。 よろしくお願いします。

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

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

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

  • ベストアンサー
  • 回答No.3

No2です。テーブル名が・・・・・・・ IIf([テーブル1]![A期間開始日] <= [テーブル1]![実施日] And [テーブル1]![実施日] <= [テーブル1]![A期間終了日],"A期間","範囲外") です。 失礼しました。

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

質問者からのお礼

piroin654さま ありがとうございます。 出来ました。一回では無理だったのですね。 andで繋げることで複合的に条件が入れられることがわかりました。 また、CDateについてはスラッシュを抜いた8バイトの日付(テキスト型)から formatを使って日付型に換えてはいたのですが心配だったのでつけてみました。 ありがとうございました。

関連するQ&A

  • 【access】テキストから日付へ変換するとエラーになる

    環境 OS:windowsXP pro Access:access2000 こんにちは。いつもお世話になっております。 テキスト形式(20080119)のデータをクエリで日付型(2008/01/19)にしたいのですが上手くいきません。 過去ログ等からCDATE(format([フィールド名],"yyyy/mm/dd"))とすれば良いというのはわかったんですが クエリを実行すると「#Error」となってしまいます。 ちなみに書く場所は選択クエリの「フィールド:」の所でいいんですよね?別フィールドを隣に挿入して記入しました。 テーブルのプロパティから書式を日付(S)に変更するとデータが消えてしまったのでそれは避けたいです。 他のやり方などありましたらご教授願います。よろしくお願い致します。

  • ACCESS2010で直近の日付を取得したいのです

    お世話になっています ACCESS2010で以下のことがやりたいのです 2つのテーブル「カレンダー」と「データ」があります データの中には「NO」と「指定日」というフィールドがあります データ no      指定日 9364     2012/08/06 9365     2012/08/10 9366     2012/08/11 9367     2012/08/12 カレンダーの中には「日付」と「日祭」というフィールドがあります カレンダー 日付         日祭 2012/08/04    0 2012/08/05    1 2012/08/06    0 2012/08/07    0 2012/08/08    1 2012/08/09    1 2012/08/10    1 2012/08/11    1 2012/08/12    0 「データ」テーブルを元にして作ったクエリーで、新たに追加した出荷日フィールドに、同じレコードの指定日よりも小さく、かつカレンダーテーブルで「日祭」にはいっている「1」を抜かした直近の日付を表示させたいのです その日付が「0」の場合はそのままの日付をとります それぞれの出荷日は以下のようにしたいのです データ クエリ no       指定日       出荷日 9364     2012/08/06     2012/08/04 9364     2012/08/10     2012/08/07 9345     2012/08/11     2012/08/07 9372     2012/08/12     2012/08/12 これはどのようにしたらできるのでしょうか 大変困っています 教えていただけると助かります

  • 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]![対象日]) どこが問題なのでしょうか… どなたかご教授お願い致します。

その他の回答 (2)

  • 回答No.2

以下では? IIf([テーブル4]![A期間開始日] <= [テーブル4]![実施日] And [テーブル4]![実施日] <= [テーブル4]![A期間終了日],"A期間","範囲外") フィールドが日付型ならばCDateは必要ありませんが。

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

  • 回答No.1
noname#192382
noname#192382

エクセルでデータの右側の4番目のセルに次の式を入れると、希望通りの計算をやってくれます。参考にしてください。 =IF(B2<=A2,(IF(A2<=C2,"A期間","範囲外")),"範囲外")

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

質問者からのお礼

optimumsoupさま ありがとうございます。 Excelで試したところ必要とする結果が返されました。 Accessとはifの使い方はほぼ一緒ですが難しいですね。 ありがとうございました。

関連するQ&A

  • Accessのテーブルに稼働日フィールドを追加したい

    ACCESSのAテーブルの[開始日]フィールドと[終了日]フィールドにそれぞれ日付が入っています。 Bテーブルの[祝日]フィールドに年度内の祝日データが入っています。 Aテーブルに新しく[開始日]から[終了日]までの期間で土日と祝日を除いた日付(要は稼働日)の日数を表示させるフィールドを作成したいのです。 DATEDIFFで期間内の日数、期間内の土日の日数を計算することはできたのですが、Bテーブルのデータ内で期間内のデータの数を数えて引くということができません。 そもそもこのやり方でよいのかも、疑問なのですが、よい方法を教えていただけませんでしょうか? どうぞ、よろしくお願いいたします。

  • 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 日付データのテーブル上での不具合 OS:Windows10 Access:2013 ⇒ Office365 お世話になっております。 現在クライアントのデータベースをクリーニングしております。 日付型フィールド(フィールド名:日付)に見た目上日付が入っているのですが、 連結フォーム上に表示するとデータによって不具合が生じます。 例) テーブル格納データ:2019/11/05 フォーム上のテキストデータ:令01年11月(フォーム上は和暦年月表示) 同じテキストボックス(表形式)なのに、クリックした時の反応がデータによって違います。 あるデータは「2019/11/05」に戻るのに対して不具合があるデータは「令01年11月」のままです。 テーブルで直修正をするとそのデータはクリック時に「2019/11/05」に戻ります。 見た目上は同じでも格納データは型が違うようです。 いちいち不具合のあるデータを探して手で修正するわけにもいかないで、検索して見つけた情報を基に コード等で変換をしているのですが、改善されません。 <試したこと> (1)更新クエリ format関数による変換(Format([日付],"yyyy/mm/dd")) (2)コードで変換   Dim h_date As String   Dim h_date_true As Date If Not IsNull([日付]) Then h_date = Left([日付], 4) & Mid$([日付], 6, 2) & Right([日付], 2) h_date_true = DateSerial(Left(h_date, 4), Mid(h_date, 5, 2), Right(h_date, 2)) h_date_true = CDate(Format(h_date_true, "@@@@\/@@\/@@")) End If   レコードセット![西暦] = h_date_true この連結フォーム上で修正フィールドのデータを更新する仕様です。 クエリやレコードセット等でデータをそろえるために何か良い方法はございますでしょうか。

  • 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 のみ抽出したいです。 この場合のクエリの設定方法を教えてください。 どうぞ宜しくお願いいたします。

  • Accessで日付の比較がうまくいかない

    いつも楽しく勉強させていただいております。 Access2013のVBAでADOを使ったシステムを作っています。 その中にある契約の月額料金に対して日割で控除額を計算する処理があります。 契約のテーブルには契約が何日~何日(From~To)まで有効であるかを格納し、 控除のテーブルには何日~何日(From~To)まで控除するかが入っています。 日割を行う前に控除のFrom~Toが契約のFrom~Toの範囲内であることのチェックをします。 If Deduction!To > Contract!To Then 一連のエラー処理 Exit Function End If 上記のコードを実行してうまくいく時といかない時があります。 エラーでないはずなのにエラーになります。 うまくいかない時にイミディエイトウィンドウでみると、こうなっていました。 ?Contract!To 2014/02/14 ?Deduction!To 2014/02/13 ?Deduction!To > Contract!To True Deduction!Toは2014/02/13ですからContract!Toの2014/02/14より大きいはずはないのですが・・・。 どちらのテーブルのTo列も日付時刻型です。 ためしにCdate関数を使ってみましたが、これは意図したとおりに動きました。 If Cdate(Deduction!To) > Cdate(Contract!To) Then ということで何とか回避する手段はあるのですが、気持ち悪いです。 (1)どうしてこういった現象がおきるのか。 (2)ADOのRecordsetを使った日付の比較は危険なのか。 (3)もっと根本的な解決法はありますか。 どなたかご存知の方教えてくださいませんか。

  • Access97 → Access2002

    最近会社でAccess97からAccess2002へ乗り換えた(パソコンもOSも変更)のですが、ファイルを変換(2000形式に)してから、不具合がおきています。 あるデータベースからデータを抽出する作業なのですが、 [A]・[B]二つのテーブルからテーブル[C]を作成する[テーブル作成クエリ]があり、これで作成した[C]をもとにクエリ[D]を実行し、Excelに[D]をエクスポートするという形になっています。 [テーブル作成クエリ]を手動で実行すると正常にテーブルが作成されるのですが、 マクロで実行するとうまくいきません。 マクロは メッセージの設定 ・・・いいえ クエリを開く   ・・・テーブル作成クエリを実行 ワークシート変換 ・・・[D]をExcelのワークシートにエクスポート メッセージボックス・・・"Excelへの書き出しを終了しました" となっています。 具体的には、テーブル作成クエリを実行するときには、 集計開始日と終了日をパラメータとして入力する必要があり、 作成されたテーブル[C]には入力した開始日と終了日が書き込まれます。 [D]のクエリを実行する際には[C]の開始日と終了日が抽出条件となります。 手動で[テーブル作成クエリ]を実行したときには [C]に開始日と終了日が書き込まれているのですが、 マクロで実行したときには、[C]にこの開始日と終了日が書き込まれないため、 結果的にフィールド名だけが入力されたデータの全くないExcelファイルが作成されます。 ちなみにマクロで実行する場合は、あらかじめ日付範囲を入力するフォームに開始日と終了日を入力してから実行します。 長々と書いてしまいましたが、これでおわかりいただけるでしょうか? わかりにくければまた補足いたしますので、 マクロで実行したときに正常に動作するようにするにはどうすればいいのか なにか解決策がありましたら教えてください。

  • Officeアクセス テーブル「テキスト型」⇒「日付型」への変換について

    テーブルにデータが保管されており、そのフィールドの一つに「テキスト型」で”20080301”のようなデータを持っています。これを「日付/時刻型」”2008/03/01”のように変換したいのですが、どのようにすればよいのでしょうか。 ※ちなみにこのオリジナルデータは毎日、自動的にテーブルにダウンロードされており、このテーブル自体の型を予め「日付/時刻型」に変換すると、日々のデータ取得時にエラーとなってしまいます。ですので、「日付/時刻型」のフィールドを持った新規のテーブルに、この”20080301”のデータを変換し格納したいのですがどのようにすればよろしいでしょうか。 テーブル⇒デザインより、該当のフィールドの型を「テキスト型」⇒「日付/時刻型」へ直接変換してしまうと、「データの変換中にエラーが発生しました。○○件のレコードのデータが失われました。」と表示されます。素人のため、なるべく追加クエリや更新クエリや簡単な関数のみでの方法を教えていただけたら幸いです。

  • クエリで日付型のIIF関数の使用

    テーブル1にフィールド名→日付、データ型→日付/時刻型(主キーなし) を作成し、 クエリ1を作成し、フィールド1にテーブル1の日付フィールドをドラッグし、 フィールド2には「有無: IIf([日付]="","未",[日付])」 を入力しました。 「日付フィールドが空白なら有無フィールドは「未」、入力されているならその日付を表示する」 としたいです。 しかし画像のように 日付フィールドが空白→有無フィールドも空白 日付フィールドに日付が入っているなら→有無フィールドは#エラー になってしまいます。 何がだめなんでしょうか? よろしくお願い致します。

  • access 日付

    はじめまして。 access(初心者)です。 データを抽出したいのですが、 クエリの抽出条件にどのように条件入力してよいのか 分かりません。 テーブル名:商品マスタ データ  商品No. 開始日   終了日    価格 (1) 100 2008/12/01 2009/06/30 \1,000 (2) 100 2009/07/01 2010/02/01 \1,500 (3) 100 2010/03/01 2010/12/31 \2,000 このテーブルから、例えば、今日=2010/01/04 が含まれているデータを抽出したいのですが。。。 上の例で言うと、答えは(2) 本当すみませんが、教えて下さい。

  • ACCESS クエリ 日付の条件でフラグ立て

    ACCESSクエリ上で [売上日][B][C] と言う並びのフィールドがあります。 [B]のフィールド条件に  ・[売上日]のデータが作業日の月の先月に属せば1を。   そうでなければ0を返す。 [C]のフィールド条件に  ・[売上日]のデータが作業日の月の先々月に属せば1を。   そうでなければ0を返す。 と言う指定したいと考えておりますが、上手くいきません。 Year([SalesDate])* 12 + DatePart("m", [SalesDate]) = Year(Date())* 12 + DatePart("m", Date()) - 1 では日付を返してしまうため、IIFと組み合わせようとしましたが上手くいきません。 上手いやり方を御存じの方がいらっしゃいましたら、何卒ご教授頂きたく存じます。 よろしくお願いいたします。