Accessを使って日付を比較する方法とは?

このQ&Aのポイント
  • MSofficeのAccessを使用して日付を比較する方法についてまとめました。テーブル1のフィールドには実施日、A期間開始日、A期間終了日があり、データ1とデータ2の日付を比較します。
  • 日付の比較方法をクエリに入力した関数を使って説明しました。クエリには、IIf関数を使用して、実施日がA期間に入るかどうかを判定する処理を書きます。
  • 実行させると、データ1はA期間に入り、データ2は期間外と表示されます。しかし、実際にはデータ1、データ2とも期間外が返される問題があります。どのように修正すればよいか検討しています。
回答を見る
  • ベストアンサー

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です。 よろしくお願いします。

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.3

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

koba28
質問者

お礼

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

その他の回答 (2)

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.2

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

noname#192382
noname#192382
回答No.1

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

koba28
質問者

お礼

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

関連するQ&A

  • 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" どなたか、お助け下さい。よろしくお願い致します。

  • アクセスのクエリについて教えてください

    契約日付が数値になっているテーブルを更新クエリで日付形式にし、契約期間が1年未満のデータは削除したいと思っています。 例) (1)20110401 → 2011/04/01 Left(元データ,4)&"/"&Mid(元データ,2)&"/"&Right(元データ,2) という式で更新クエリを作り、契約開始日、終了日とも日付形式にしました。 (2)契約期間1年以上のデータを特定する 契約開始日<="2011/03/31"で契約終了日>="2012/03/31" というテーブル作成クエリを作りました。 しかし、契約終了日がブランクのデータがあり、そのデータも(2)に含めたいと思っています。 ただのブランクであれば、契約終了日の条件式にor Null でいいのかなと思ったのですが、 (1)で更新クエリを実行しているため、ブランクではなく「//」が入っています。 どのような式にすれば、「//」データも含むことができますか? アクセスに詳しくなく、わかりにくい説明で申し訳ありませんが、助けてください。

  • 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で日付の比較がうまくいかない

    いつも楽しく勉強させていただいております。 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)もっと根本的な解決法はありますか。 どなたかご存知の方教えてくださいませんか。

  • access2000にてクエリで日付計算

    アクセスのテーブルにて 開始時間 00:00 と終了時間 99:99 を持っています クエリで 終了時間-開始時間を計算し 実働時間 00:00 を出したいのですが 普通に計算すると0.023088・・・とかの数字になります 実働時間を計算する方法はありますでしょうか? 開始時間 終了時間ともデータ型は 日付/時刻型になってます

  • Access97 → Access2002

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

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

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

  • accessである期間にいる人のクエリ抽出をしたい

    access2002を使っています。 テーブルAで、それぞれの人の活動開始日と終了日のデータを もっています。 名前    開始日    終了日 ─────────────────── 井上さん  2005/07/01  2005/11/30 渡辺さん  2005/09/22  2005/09/23 佐藤さん  2005/10/03  2005/10/05  ・  ・  クエリで、「2005/10/01~31まで活動した人」 (テーブルAで、活動期間の中に10月が1日でも含まれている人」を 抽出したいのですが、どうすればよいのかわからず困っています。 テーブルAで言えば、10月の活動者だと、 井上さんと佐藤さんを抽出したいのです。 よろしくお願いします。

  • 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 データ抽出および集計の方法

    Access2016を使って下記データ抽出および集計をしたいのです。 テーブルA 商品CD 契約日 会社CD テーブルB 会社CD 契約期間開始日 契約期間終了日 テーブルC 商品CD 商品種別 テーブルAとテーブルCの商品CDをリレーション テーブルAとテーブルBの会社CDをリレーション 集計したいデータ 契約日が期間開始日~期間終了日に含まれるテーブルAのデータを抽出したいです。 これが取れれば、クロス集計で会社CD毎の商品種別の数を最終的に計算します。 期間開始日~期間終了日はそれぞれの会社CD毎に違います。 また、同じ会社CDに開始日~終了日以外の日付データも含まれています。 このような抽出はできないでしょうか?

専門家に質問してみよう