• ベストアンサー

日付のチェックなのですが

日付の入力チェックについて教えてください。 アクセス2000のVBでプログラムを作っているのですが、 二つのテキストボックスがあり日付をFrom、Toで入力してもらい その入力された期間が1ヶ月以上だったらエラーとしたいのですがいい方法はないでしょうか? 入力形式は2001/01/01という形です。 月またがりの一ヶ月以内(2001/01/31~2001/02/10等)はエラーとはしません。 すみませんがどなたか良い方法をご存知でしたら教えて下さると助かります。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Hk2001
  • ベストアンサー率48% (24/49)
回答No.3

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

yuuhi
質問者

お礼

Hk2001さんありがとうございます。 どうやらこの方法が一番ベストのようです!! 回答していただきありがとうございました。 とても助かりました。また何かあったらその時は宜しくお願いします<(_ _)>

その他の回答 (3)

noname#5067
noname#5067
回答No.4

#3.Hk2001さんの回答がベターだと思いますが、 ローカル変数 sAddDate と sEDate を String型 のまま比較しちゃっちゃってるところが気になりました。 実動作では恐らく問題ないし、結構平気でやっちゃいますけどね。 しかしY2Kのころとか、結構アバウトなロジック部分がおかしくなっちゃったりしたから、データ型は厳密に適用するに越したことはないってだけです。 あと99年ぐらいは大丈夫でしょう。 それと、DateAddはOSの日付によるので、OSのカレンダがバグってると狂います。 といってもわざわざ1ステップで済むところを自分でコーディングするほどヒマじゃないけど・・・。余計な話ですね。失礼。

yuuhi
質問者

お礼

余計な話なんてとんでもないです!! >DateAddはOSの日付によるので、OSのカレンダがバグってると狂います。 そうなんですかー。知りませんでした。 貴重な情報ありがとうございました。

  • Tetsuro_M
  • ベストアンサー率19% (4/21)
回答No.2

DATEDIFF関数ではダメですか?

yuuhi
質問者

お礼

DATEDIFFを使って戻り値が31より大きかったらエラーという事でしょうか? さっそく実行してみます!! アドバイスありがとうございました。<(_ _)>

  • coolguys
  • ベストアンサー率18% (351/1917)
回答No.1

力技であれば、 例:2001.5.1~2001.5.30 年を比べて同じであれば、 月を見て、月も同じであれば日を見る。 終わりから開始の日を引く、1ヶ月以上ならエラー 例:2001.5.15~2001.6.10 月が違うなら、その月の日にちを足す (31+15)-10 = 36 一ヶ月以上なのでエラー というようにしたら良いのでは?

yuuhi
質問者

お礼

なんとかチェックできるようになりました。 アドバイスありがとうございました。 また何かありましたらよろしくお願いします≦(._.)≧

関連するQ&A