いつも楽しく勉強させていただいております。
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も見ています
-
「環境が人を育てる」って本当?環境によって人格や生き方は本当に変わるのか
環境が人生に与える影響は実際どれほどのものなのか、専門家の田宮由美さんに伺った。
-
Accessを使って日付を比較したい
その他(Microsoft Office)
-
ACCESSで2つフィールドの日付を比較して新しい日付を表示するには。
Access(アクセス)
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
-
4
ACCESS 日付の比較
Access(アクセス)
-
5
Access フォームのテキストボックスに半角英字のみで入力する設定は
Access(アクセス)
-
6
Accessの日付時刻型から日付、時刻カラムを作る
Access(アクセス)
-
7
ACCESS 一番最新の日付の金額を出したいのですが・・
その他(データベース)
-
8
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
9
Access VBA SQL文で教えてください
PowerPoint(パワーポイント)
-
10
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
11
「#エラー」の回避
Access(アクセス)
-
12
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
13
クエリで日付型のIIF関数の使用
Access(アクセス)
-
14
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
15
ACCESSでコントロールソースの変更
Access(アクセス)
-
16
パラメータが少なすぎます。1を指定して下さい。""
Excel(エクセル)
-
17
Accessのマクロでモジュールを実行させたい。
Access(アクセス)
-
18
Accessのリンクされたテーブルでリンク先ではデータを変更出来ないようにするには?
Access(アクセス)
-
19
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
20
エラー(型が一致しません。)の対処方法
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Access クエリで、レコードの無...
-
Excleピボットでデータのない部...
-
BCPでCSV内の文字列をテーブル...
-
日付/時刻型フィールドで時刻デ...
-
Accessでnow()で取り出した日付...
-
アクセスの昇順並び替えで空白...
-
アクセス97のVBAで日付項目をヌ...
-
Access2000 週報のレポート作成
-
Accessの日付時刻型から日付、...
-
前のレコードの合計に現レコー...
-
VBA 別シートの同じ日付の欄に...
-
Accessのデータ型の日付/時刻型...
-
式を簡単にしてください。ACCES...
-
【エクセル】指定した日付に一...
-
Accessで日付の比較がうまくい...
-
アクセスで月単位の抽出
-
質問
-
差込印刷での全角表示について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
VBA 別シートの同じ日付の欄に...
-
Accessの日付時刻型から日付、...
-
BCPでCSV内の文字列をテーブル...
-
アクセスで月単位の抽出
-
Excel→Accessへの日付データの...
-
指定日付を起点にして最新日付...
-
Access クエリで、レコードの無...
-
ACCESSの空白をカウントする
-
【vba】日付の形式が勝手に変わ...
-
【エクセル】指定した日付に一...
-
アクセス:既定値に土日含まず...
-
Accessで日付の比較がうまくい...
-
【Accessで困っています...
-
Accessのデータ型の日付/時刻型...
-
クロス集計のユニオンクエリー...
-
アクセスの昇順並び替えで空白...
-
Accessでnow()で取り出した日付...
おすすめ情報