いつも楽しく勉強させていただいております。
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)もっと根本的な解決法はありますか。
どなたかご存知の方教えてくださいませんか。
No.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が逆転する。
何度か痛い目に遭いました。
参考URL:http://office.microsoft.com/ja-jp/access-help/HA …
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なのでこれからも工夫して付き合っていきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) Dateserialで データ抽出 2 2022/06/26 21:07
- 英語 The Twilight Zone1959に関するCBSの回答について 1 2023/03/02 15:13
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- その他(SNS・コミュニケーションサービス) 自分のpcがハッキングされたようなメールが来たのですがどうすればいいですか? 4 2022/10/02 16:14
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
Accessを使って日付を比較したい
その他(Microsoft Office)
-
ACCESSで2つフィールドの日付を比較して新しい日付を表示するには。
Access(アクセス)
-
ACCESS 一番最新の日付の金額を出したいのですが・・
その他(データベース)
-
-
4
Accessの日付時刻型から日付、時刻カラムを作る
Access(アクセス)
-
5
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
6
アクセス VBAについて FROM句の構文エラー
Access(アクセス)
-
7
ACCESS 日付の比較
Access(アクセス)
-
8
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
9
「#エラー」の回避
Access(アクセス)
-
10
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
11
クエリで日付型のIIF関数の使用
Access(アクセス)
-
12
OR関数
その他(Microsoft Office)
-
13
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
14
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
15
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
16
2つ目のレコードの値を取得するには?
Access(アクセス)
-
17
アクセスで月単位の抽出
Access(アクセス)
-
18
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
-
19
ACCESSで1月1日~12月31日までの日付を入れる方法
その他(データベース)
-
20
Access2000 2番目に大きい数値の抽出
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
前のレコードの合計に現レコー...
-
Accessのデータ型の日付/時刻型...
-
Access クエリで、レコードの無...
-
BCPでCSV内の文字列をテーブル...
-
VBA 別シートの同じ日付の欄に...
-
指定日付を起点にして最新日付...
-
アクセスで月単位の抽出
-
アクセスの昇順並び替えで空白...
-
【Accessで困っています...
-
アクセス:既定値に土日含まず...
-
Access dcount 複数条件
-
ACCESSの空白をカウントする
-
エクセル-過去6カ月分の合計を...
-
Microsoft Query の抽出条件に...
-
クロス集計のユニオンクエリー...
-
access 横型カレンダーを使用し...
-
アクセス97のVBAで日付項目をヌ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
アクセスで月単位の抽出
-
BCPでCSV内の文字列をテーブル...
-
Accessの日付時刻型から日付、...
-
VBA 別シートの同じ日付の欄に...
-
Excel→Accessへの日付データの...
-
Access クエリで、レコードの無...
-
指定日付を起点にして最新日付...
-
アクセス:既定値に土日含まず...
-
【エクセル】指定した日付に一...
-
ACCESSの空白をカウントする
-
Accessで日付の比較がうまくい...
-
【vba】日付の形式が勝手に変わ...
-
前のレコードの合計に現レコー...
-
エクセル-過去6カ月分の合計を...
-
Accessのデータ型の日付/時刻型...
-
【Accessで困っています...
-
アクセス97のVBAで日付項目をヌ...
おすすめ情報