- ベストアンサー
日付のチェックなのですが
日付の入力チェックについて教えてください。 アクセス2000のVBでプログラムを作っているのですが、 二つのテキストボックスがあり日付をFrom、Toで入力してもらい その入力された期間が1ヶ月以上だったらエラーとしたいのですがいい方法はないでしょうか? 入力形式は2001/01/01という形です。 月またがりの一ヶ月以内(2001/01/31~2001/02/10等)はエラーとはしません。 すみませんがどなたか良い方法をご存知でしたら教えて下さると助かります。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
DateAdd関数をよく使いますよ。 一ヶ月というので日にち換算するのは微妙だから 単純に一ヶ月加算するのがベストではないでしょうか? 入力したFromに一ヶ月加算して比較する方法です。 ポイントは DateAdd関数とFormat関数です。 参考ソースをのせました。 日付のチェックは 行っていません。 入れる場合は工夫してください。 Private Sub Command1_Click() Dim sSDate As String Dim sAddDate As String Dim sEDate As String On Error GoTo FncEnd sSDate = Format$(Text1(0).Text, "yyyy/mm/dd") sAddDate = Format$(DateAdd("m", 1, sSDate), "yyyy/mm/dd") sEDate = Format$(Text1(1).Text, "yyyy/mm/dd") If sAddDate <= sEDate Then Call MsgBox("NG!!" & sSDate & " - " & sEDate, vbExclamation) Else Call MsgBox("OK!!" & sSDate & " - " & sEDate, vbInformation) End If FncEnd: End Sub
その他の回答 (3)
#3.Hk2001さんの回答がベターだと思いますが、 ローカル変数 sAddDate と sEDate を String型 のまま比較しちゃっちゃってるところが気になりました。 実動作では恐らく問題ないし、結構平気でやっちゃいますけどね。 しかしY2Kのころとか、結構アバウトなロジック部分がおかしくなっちゃったりしたから、データ型は厳密に適用するに越したことはないってだけです。 あと99年ぐらいは大丈夫でしょう。 それと、DateAddはOSの日付によるので、OSのカレンダがバグってると狂います。 といってもわざわざ1ステップで済むところを自分でコーディングするほどヒマじゃないけど・・・。余計な話ですね。失礼。
お礼
余計な話なんてとんでもないです!! >DateAddはOSの日付によるので、OSのカレンダがバグってると狂います。 そうなんですかー。知りませんでした。 貴重な情報ありがとうございました。
- Tetsuro_M
- ベストアンサー率19% (4/21)
DATEDIFF関数ではダメですか?
お礼
DATEDIFFを使って戻り値が31より大きかったらエラーという事でしょうか? さっそく実行してみます!! アドバイスありがとうございました。<(_ _)>
- coolguys
- ベストアンサー率18% (351/1917)
力技であれば、 例:2001.5.1~2001.5.30 年を比べて同じであれば、 月を見て、月も同じであれば日を見る。 終わりから開始の日を引く、1ヶ月以上ならエラー 例:2001.5.15~2001.6.10 月が違うなら、その月の日にちを足す (31+15)-10 = 36 一ヶ月以上なのでエラー というようにしたら良いのでは?
お礼
なんとかチェックできるようになりました。 アドバイスありがとうございました。 また何かありましたらよろしくお願いします≦(._.)≧
お礼
Hk2001さんありがとうございます。 どうやらこの方法が一番ベストのようです!! 回答していただきありがとうございました。 とても助かりました。また何かあったらその時は宜しくお願いします<(_ _)>