アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/29 10:00

#3.Hk2001さんの回答がベターだと思いますが、


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

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

お礼日時:2001/06/29 10:04

DATEDIFF関数ではダメですか?

    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/29 09:57

力技であれば、



例:2001.5.1~2001.5.30
年を比べて同じであれば、
月を見て、月も同じであれば日を見る。
終わりから開始の日を引く、1ヶ月以上ならエラー

例:2001.5.15~2001.6.10
月が違うなら、その月の日にちを足す
(31+15)-10 = 36
一ヶ月以上なのでエラー

というようにしたら良いのでは?
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/06/29 09:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!