VBA初心者です。
以前、このコミュニティでの回答事例を参考にし以下のモジュールを
入れて使用しておりました。
内容的には休憩時間を差し引いた休暇時間を算出するためのものです。
概ね使えていたのですが
開始時間を8:00 終了時間を11:00とした場合に
休暇時間を2:50としたいのですが0:50と出てしまいます。
終了時間が10:00~12:00を入力すると希望する時間が算出され
ないようです。
Public Function 休暇時間(開始時間, 終了時間)
Const BeginTime = #8:00:00 AM#
Const AMRestBegin = #10:00:00 AM#
Const AMRestEnd = #10:10:00 AM#
Const LunchBbreakBegin = #12:00:00 PM#
Const LunchBbreakEnd = #12:40:00 PM#
Const PMRestBegin = #3:00:00 PM#
Const PMRestEnd = #3:10:00 PM#
Const EndTime = #5:00:00 PM#
If IsNull(開始時間) Or IsNull(終了時間) Then Exit Function
If 終了時間 < 開始時間 Then Exit Function
Dim h1 As Date, h2 As Date
'始業時間~AM休息
h1 = BeginTime: h2 = AMRestBegin
If h1 < 開始時間 Then h1 = 開始時間
If 終了時間 < h2 Then
休暇時間 = CDate(終了時間 - h1)
Exit Function
ElseIf h1 < h2 Then
休暇時間 = CDate(h2 - h1)
End If
'AM休息~昼休憩
h1 = AMRestEnd: h2 = LunchBbreakBegin
If 終了時間 < h1 Then Exit Function
If h1 < 開始時間 Then h1 = 開始時間
If 終了時間 < h2 Then
休暇時間 = CDate(終了時間 - h1)
Exit Function
ElseIf h1 < h2 Then
休暇時間 = 休暇時間 + CDate(h2 - h1)
End If
'昼休憩~PM休憩
h1 = LunchBbreakEnd: h2 = PMRestBegin
If 終了時間 < h1 Then Exit Function
If h1 < 開始時間 Then h1 = 開始時間
If 終了時間 < h2 Then
休暇時間 = 休暇時間 + CDate(終了時間 - h1)
Exit Function
ElseIf h1 < h2 Then
休暇時間 = 休暇時間 + CDate(h2 - h1)
End If
'PM休憩~終業時間
h1 = PMRestEnd: h2 = EndTime
If 終了時間 < h1 Then Exit Function
If h1 < 開始時間 Then h1 = 開始時間
If 終了時間 < h2 Then
休暇時間 = 休暇時間 + CDate(終了時間 - h1)
Else
休暇時間 = 休暇時間 + CDate(h2 - h1)
End If
End Function