У своєму робочому аркуші я хочу обчислити орієнтовний час закінчення процесів, враховуючи часові рамки робочого дня.
Припустимо робочі дні з 8:00 до 17:00 та опустіть суботу та неділю.
Так, наприклад, коли я додаю 4 години до 14:00, я не хочу, щоб результат був 18:00, але 9:00 (3 години веде вас до кінця робочого дня, остання година починається наступного робочого дня ).
Хтось може мені допомогти?
EDIT -
За допомогою Саймона в rcl мені вдалося адаптувати його рішення для обчислення з хвилинами. Однак, здається, є проблема. Коли я додаю
960 хвилин до 22-05-15 16:00 функція дає правильний результат 26-05-15 14:00
однак, за годину додатково (60 хвилин) результат змінюється назад до 25-05-15 09:00.
Хтось бачить тут проблему?
Option Explicit
Public Function EndDayTimeM(StartTime As String, Minutes As Double)
On Error GoTo Hell
' start and end hour are fixed here.
' could put them in cells and look them up
Dim startMinute As Long, endMinute As Long, startHour As Long, endHour As Long
startMinute = 480
endMinute = 960 ' was 18
startHour = 8
endHour = 16
Dim calcEnd As Date, start As Date
start = CDate(StartTime)
calcEnd = DateAdd("n", Minutes, start)
If DatePart("h", calcEnd) > endHour Or DatePart("h", calcEnd) <= startHour Then
' add 15 hours to get from 17+x to 8+x
calcEnd = DateAdd("h", 15, calcEnd) ' corrected
End If
If DatePart("w", calcEnd) = 7 Or DatePart("w", calcEnd) = 1 Then
' Sat or Sun: add 2 days
calcEnd = DateAdd("d", 2, calcEnd)
End If
If DatePart("h", calcEnd) > endHour Or DatePart("h", calcEnd) <= startHour Then
' add 15 hours to get from 17+x to 8+x
calcEnd = DateAdd("h", 15, calcEnd) ' corrected
End If
EndDayTimeM = calcEnd
GoTo Ret
Hell:
EndDayTimeM = Err.Description
Ret:
End Function