プロが教えるわが家の防犯対策術!

nenonenoです。こんばんわ。
VBで時間Aから時間Bの範囲に時間Cが入っているかを調べる関数を作ろうとしていますが、初心者なので混乱しています。
Now,DateDiff、DateSerialを使えばよさそうな事は分かったのですが、、、具体的なアルゴリズムが思い浮かびません。
時間A(7:00)、時間B(18:00)、時間C(今)の場合は問題ないのですが、時間Aが(21:00)、時間Bが(7:00)、時間C(今)になった時(つまり、日がまたがった場合)にお手上げです。

varNow = Now ' Now 関数は現在の日付と時刻を返します。

' 開始時刻と終了時刻
varFrom = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intFromHour, intFromMin, 0) ' 開始時刻
varTo = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intToHour, intToMin, 0) ' 終了時刻

ここまでは書いたのですが、どう判定させて計算したらよいのでしょうか?
なにか、ヒントだけでも教えていただけるとありがたいです。

よろしくお願いします。

A 回答 (3件)

再びNo.1です



判定を2つ通さないといけないでしょうね
当日分でダメなときは、前日分もチェックしてみる

varNow = Now ' Now 関数は現在の日付と時刻を返します。

' 開始時刻と終了時刻
varFrom = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intFromHour, intFromMin, 0) ' 開始時刻
varTo = DateSerial(Year(varNow), Month(varNow), Day(varNow)) + TimeSerial(intToHour, intToMin, 0) ' 終了時刻

' 開始時刻と終了時刻の整合性
If varFrom >= varTo Then varTo = varTo + 1

' 判定(1)
If varNow >= varFrom And varNow <= varTo Then
MsgBox "OK!"
Else
' 判定(2)
varFrom = varFrom - 1
varTo = varTo - 1
If varNow >= varFrom And varNow <= varTo Then
MsgBox "OK!"
Else
MsgBox "NG!"
End If
End If

この回答への補足

おはようございます。
夜遅くに回答を頂きありがとうございます!
これから確かめてみます。

varTo+1は、日付は整数部なので1足すだけで日付の加算ができるのですね。

補足日時:2003/02/17 09:00
    • good
    • 0
この回答へのお礼

ご報告が遅くなってしまいました。

一時はどうなることかと思いましたが、おかげ様で無事に完成させる事ができました。
本当にありがとうございました。

お礼日時:2003/02/17 13:46

No.1です



失礼、If文の条件式を間違えていました
× If varNow >= varFrom And varNow >= varTo Then
○ If varNow >= varFrom And varNow <= varTo Then
    • good
    • 0

この「varNow」「varFrom」「varTo」変数は、Date型の変数ですよね


(バリアント型ですか?たぶん右辺がDate型なので大丈夫ですが...)

Date型変数は、シリアル値で格納されています
(整数部は日付、少数部は時間、詳しくはHELPで...)

日付情報が入っていると思われるので、
判定方法は、下記で大丈夫だと思います。
If varNow >= varFrom And varNow >= varTo Then
MsgBox "OK!"
Else
MsgBox "NG!"
End If

また日付情報が入っていない場合には、
24時間以内と限定して下記の様になります。
If varFrom >= varTo Then varTo = varTo + 1
If varNow >= varFrom And varNow >= varTo Then
MsgBox "OK!"
Else
MsgBox "NG!"
End If

参考になれば...

この回答への補足

早い回答ありがとうございます。
DIM宣言ではDate型にしていたのですが、変数名自体を変えるのを忘れていました。おっしゃる通りDate型ですね。^ ^

varFromとvarToは時間と分をテキストボックスで入力させているので、日付情報は自力でつける必要があります。
たとえば7:00~3:00とした場合(20時間という事です)、今2:00です。こういう場合も範囲に入っていると判断したいのです。ひぃ~(@ @)

一眠りして頭をすっきりさせてから、考えなおしてみます。

補足日時:2003/02/17 01:41
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています