
いつも楽しく勉強させていただいております。
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(アクセス)
-
「#エラー」の回避
Access(アクセス)
-
-
4
ACCESS 日付の比較
Access(アクセス)
-
5
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
6
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
7
2つのテーブルに共通するレコードを削除したい
Access(アクセス)
-
8
falseとtrue 0,1,-1 の意味が知りたいです
PowerPoint(パワーポイント)
-
9
テーブルのデータ型の変更ができない
Access(アクセス)
-
10
Accessでレコードを別テーブルへコピーするには
Access(アクセス)
-
11
Accessでフォームから別フォームのテキストボックスの値を設定する
Visual Basic(VBA)
-
12
Accessのクエリで、replace関数を使い、データの中にある”をブランクに置き換えたいのですが
Access(アクセス)
-
13
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
14
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
15
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
16
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
17
Access 最後のレコードに到達するまでループ処理を行う方法
Access(アクセス)
-
18
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
19
Accessで値がnullの場合は計算せずにnullをかえす方法
Access(アクセス)
-
20
MS Accessでフォームの「開く時」と「読込み時」のイベントの違い
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excelで、Accessで使用できる「...
-
【ピボットテーブル】4月から翌...
-
Excleピボットでデータのない部...
-
連続値を取得するクエリ
-
SQL文に関するとある問題について
-
エクセル-過去6カ月分の合計を...
-
こんな扱いにくいデータ形式ど...
-
今週分だけ表示させたい
-
月毎、日別に条件に当てはまる...
-
Access クエリで、レコードの無...
-
SQL Server2005のクエリで「今...
-
BCPでCSV内の文字列をテーブル...
-
Access:フォームのデータの並び順
-
【Access】クエリでの日付処理...
-
ACCESS で、古い日付順に抽出し...
-
Accessのクエリ / 曜日の表示...
-
クロス集計のユニオンクエリー...
-
アクセスで月ごとの集計
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
VBA 別シートの同じ日付の欄に...
-
アクセスで日付を入力すると曜...
-
Excel→Accessへの日付データの...
-
Accessの日付時刻型から日付、...
-
指定日付を起点にして最新日付...
-
【vba】日付の形式が勝手に変わ...
-
BCPでCSV内の文字列をテーブル...
-
【エクセル】指定した日付に一...
-
アクセスで月単位の抽出
-
Accessのデータ型の日付/時刻型...
-
アクセス:既定値に土日含まず...
-
ACCESSの空白をカウントする
-
エクセル-過去6カ月分の合計を...
-
Accessで日付の比較がうまくい...
-
ビュー定義をプログラムで動的...
-
Access クエリで、レコードの無...
-
アクセス97のVBAで日付項目をヌ...
おすすめ情報