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) ' 終了時刻
ここまでは書いたのですが、どう判定させて計算したらよいのでしょうか?
なにか、ヒントだけでも教えていただけるとありがたいです。
よろしくお願いします。
No.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足すだけで日付の加算ができるのですね。
ご報告が遅くなってしまいました。
一時はどうなることかと思いましたが、おかげ様で無事に完成させる事ができました。
本当にありがとうございました。
No.2
- 回答日時:
No.1です
失礼、If文の条件式を間違えていました
× If varNow >= varFrom And varNow >= varTo Then
○ If varNow >= varFrom And varNow <= varTo Then
No.1
- 回答日時:
この「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です。こういう場合も範囲に入っていると判断したいのです。ひぃ~(@ @)
一眠りして頭をすっきりさせてから、考えなおしてみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 指定した値以上の中で最小値を出したい 7 2022/10/24 21:12
- その他(Microsoft Office) エクセル 条件付き書式 日をまたぐ塗りつぶし 1 2023/01/13 18:00
- Excel(エクセル) エクセル2019の関数を教えてください。 8 2022/12/16 12:45
- MySQL ある時間以内の利用者の抽出について 3 2022/03/26 11:15
- Excel(エクセル) 時間差を求めるマクロコードを教えてください。 4 2022/05/17 18:22
- その他(教育・科学・学問) エクセル関数について 2 2022/12/23 08:59
- その他(Microsoft Office) 勤務表のエクセル作成で数式を教えてください。 1 2023/01/17 03:27
- Windows 10 パソコンを再起動、起動するたびに時間が戻る。 7 2022/10/20 06:01
- Excel(エクセル) エクセル 条件に合う日付に入力された時間数の合計したい 4 2022/06/17 22:18
- エアコン・クーラー・冷暖房機 日立のエアコンのリモコン 5 2023/04/01 00:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
VisualBasic6.0のFormat関数で...
-
エクセルのVBAで日付を検索し転...
-
DataGridViewでyyyy/MM/dd
-
VB6.0 のformat関数について
-
3人のじゃんけんのプログラム
-
週間カレンダー vbscript
-
指定した日付が、その月の第何...
-
【Excel VBA】条件に合った行の...
-
Laravelクエリビルダにてウィン...
-
今日より前の書き方 マクロ
-
htmlで日付表示。三日後の日付...
-
VB.NET 日付設定
-
該当の日付以外を消去するプロ...
-
SqlCommandBuilder 使用時のサ...
-
excelのVBAについて、以下のコ...
-
ユーザーフォームのラベルに日...
-
完全一致の検索
-
C++で日付判定を行いたい!!
-
JSPからYYYYMMDDで日付入力する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseの対応する括弧の強調表...
-
人をはめた人は 自分に返ってく...
-
DataGridViewでyyyy/MM/dd
-
エクセルのVBAで日付を検索し転...
-
ユーザーフォームのラベルに日...
-
VisualBasic6.0のFormat関数で...
-
コンボボックスに日付を表示する
-
テキストボックスにカレンダー...
-
1本あたり○円と表示する時どの...
-
指定した日付が、その月の第何...
-
VBAで当月の1日を表示するには...
-
VBA 日付・時刻の判別 時刻を認...
-
今日より前の書き方 マクロ
-
システム日付とは?
-
テキストボックスに今日の日付...
-
DateTimePickerを西暦表示にす...
-
JSPからYYYYMMDDで日付入力する
-
C++で日付判定を行いたい!!
-
ExcelVBAでSQLサーバの日付時刻...
-
【Excel VBA】条件に合った行の...
おすすめ情報
