- ベストアンサー
EXCELでいうシリアル値をACCESSで出したい
質問タイトルの通りです。VBAでFORM中の2つの日付を比較し、処理を分岐させたいのです。 自分なりに作っては見たのですが、ちゃんと動きません。どこが悪いんでしょう。 ' Dim hiduke As Integer: hiduke = CInt(IsDate(Forms![F_売上伝票]![日付])) ' Dim open_date As Integer: open_date = CInt(CDate("#2003 / 5 / 5#")) ' If hiduke <= open_date Then '正しい日付が入っていない場合には、 ' Forms![F_売上伝票]![入力日] = Date ' MsgBox "OPEN前です", vbInformation ' End If
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
> 日付型で大小判定が出来るかどうか分からなかったので、 できます。 注意すべきことは、時刻データまで持っているかどうか?ぐらいですね。 日付/時刻型は、内部的には日付部分を整数で、時刻部分を 小数で管理しています。
その他の回答 (1)
今ちょっとACCESSの検証出来る環境がないので、ソースを見せてもらっただけです。参考意見として聞いてください。 一番問題かなと思うのは、hiduke = CInt(IsDate(Forms![F_売上伝票]![日付]))の部分で、IsDate関数の結果をCInt関数の引数にしているところです。 IsDate関数の結果は、TrueまたはFalse(数値としては-1と0)を返します。ですからCInt関数は、フォームで指定した値を返しません。 フォームで入力した値が日付として有効かどうかの判断は、hidukeへの代入より前に、If文で行いましょう。 あと日付が内容の変数をIntegerで確保するのも意図がよく理解できないです。日付型でいいのでは?
補足
回答有り難うございます。 >一番問題かなと思うのは、hiduke = CInt(IsDate(Forms![F_売上伝票]![日付]))の部分で、IsDate関数の結果をCInt関数の引数にしているところです。 ここは、他の箇所(日付が正しくない時はリセットする箇所)を良く見もせずにコピペしたところです。動くわけ無いですね。 >あと日付が内容の変数をIntegerで確保するのも意図がよく理解できないです。日付型でいいのでは? これについては、日付型で大小判定が出来るかどうか分からなかったので、Excelでいうシリアル値に変換したいと思っての事です。そのまま出来れば良いのですが....
お礼
本当に有り難うございました。解決しました。 結局、下記のようにしました。 Dim hiduke As Date: hiduke = CDate(Forms![F_売上伝票]![日付]) Dim open_date As Date: open_date = CDate("2003 / 5 / 5") If hiduke < open_date Then '正しい日付が入っていない場合には、 MsgBox "OPEN前です。修正します。", vbInformation Forms![F_売上伝票]![日付] = CDate(Forms!F_売上伝票!入力日) '正しい日付をSETします。 End If またお訊きすると思いますが、よろしくお願いします。
補足
回答有り難うございます。 >日付/時刻型は、内部的には日付部分を整数で、時刻部分を >小数で管理しています。 これがExcelでいうシリアル値ですよね。これを数値として扱えないですかね。勿論整数部分だけで.... 日付型でそのまま比較出来るなら、試して見ます。