- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessで日付の比較がうまくいかない)
Accessで日付の比較がうまくいかない
このQ&Aのポイント
- Access2013のVBAでADOを使ったシステムを作っています。契約の月額料金に対して日割で控除額を計算する処理がありますが、日付の比較がうまくいかない問題があります。
- エラーが発生している箇所では、控除の終了日(Deduction!To)が契約の終了日(Contract!To)よりも大きいという条件で処理が行われるはずですが、実際にはエラーが発生してしまいます。
- 一時的な回避策として、Cdate関数を使用して日付型に変換することで正常に処理が行われることが確認されていますが、より根本的な解決法を探しています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
> ためしにCdate関数を使ってみましたが 元のデータはテキスト型ということですか? 日付型のまま、大小比較するのは危ないと思います。 (1)どうしてこういった現象がおきるのか。 「たぶん」程度ですが、日付表記の文化の違いかも。 日本では「年月日」の言葉通り、yyyymmddですよね。これは大小比較しやすい。 でも合衆国ではmm-dd-yyyyだし、他の英語圏ではdd-mmm-yy。 クエリに日付を#で囲んで記述する際に#14/03/2014#と書くようです(参考URL) なので > ?Deduction!To > 2014/02/13 は 14/02/13 → 2013/02/14と解釈されてるのかも。 if format(Deduction!To, "YYYY/MM/DD") > format(Contract!To, "YYYY/MM/DD) Then みたいに明示したほうがトラブルにならないと思います。(処理速度が不利としても) バージョンによるのかも、とは思いますが 1)ACCESSでタイムスタンプ目的で年月日時分秒を記録して 2)レコードコピーして、 3)EXCELにペーストすると、dd-mmm-yyになる。 4)それをEXCELでコピーして 5)ACCESSにペーストすると、yyとddが逆転する。 何度か痛い目に遭いました。
お礼
bin-chanさん、回答ありがとうございます。 >元のデータはテキスト型ということですか? いえ、どちらのテーブルもFromとToは日付時刻型です。 本来ならこのまま比較してもかまわないはずですよね。 >「たぶん」程度ですが、日付表記の文化の違いかも。 私もそんな気がしていました。 >if format(Deduction!To, "YYYY/MM/DD") > format(Contract!To, "YYYY/MM/DD) Then >みたいに明示したほうがトラブルにならないと思います。(処理速度が不利としても) 多少処理が遅くなっても、日付の比較はとても重要ですからそうすることにします。 >バージョンによるのかも、とは思いますが >1)ACCESSでタイムスタンプ目的で年月日時分秒を記録して >2)レコードコピーして、 >3)EXCELにペーストすると、dd-mmm-yyになる。 >4)それをEXCELでコピーして >5)ACCESSにペーストすると、yyとddが逆転する。 >何度か痛い目に遭いました。 私もそういうことありました。 どうにかならないものかと思いますが他のDBMSでも日付関連のトラブルはあると 聞きますし、好きで使っているAccessなのでこれからも工夫して付き合っていきます。 ありがとうございました。