问题
I am currently using a forumla to add working hours to a start date and time:
=WORKDAY(A1,INT(B1/8.5)+IF(TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)>TIME(17,30,0),1,0),$D$1:$D$21)+IF(TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)>TIME(17,30,0),TIME(9,0,0)+TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)-TIME(17,30,0),TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0))
Cell A1 is the start date, Cell B1 is the amount of hours to add, and column D is bank holidays
So far this works great, however if the start date and time is outside of the 9:00 to 17:30, then it shows the wrong date and time.
Is there any reason why this happens? and what i can do to overcome this issue?
For example:
A B C D
24/08/2019 10:31:17 16 28/08/2019 09:31 26/08/2019
Column C is where the forumla sits and in this example of only adding 9 Hours. Column A's date is logged outside of working hours, on a saturday. The correct date and time should be 28/08/2019 16:30 as it will start counting after bank holiday on the Monday.
回答1:
I resolved the issue myself using two sets of formulas depending if the date and time falls in or out of working time:
=IF(AND(WEEKDAY(A1,2)<6,HOUR(A1)>9,HOUR(A1)<17.5,COUNTIF(D1:D21,DATE(YEAR(A1),MONTH(A1),DAY(A1)))=0),WORKDAY(A1,INT(B1/8.5)+IF(TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)>TIME(17,30,0),1,0),$D$1:$D$21)+IF(TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)>TIME(17,30,0),TIME(9,0,0)+TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)-TIME(17,30,0),TIME(HOUR(A1),MINUTE(A1),SECOND(A1))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)),WORKDAY(WORKDAY(A1,1,D1:D21)+TIME(9,0,0),INT(B1/8.5)+IF(TIME(HOUR(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)),MINUTE(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)),SECOND(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)>TIME(17,30,0),1,0),$D$1:$D$21)+IF(TIME(HOUR(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)),MINUTE(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)),SECOND(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)>TIME(17,30,0),TIME(9,0,0)+TIME(HOUR(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)),MINUTE(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)),SECOND(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)-TIME(17,30,0),TIME(HOUR(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)),MINUTE(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)),SECOND(WORKDAY(A1,1,D1:D21)+TIME(9,0,0)))+TIME(MOD(B1,8.5),MOD(MOD(B1,8.5),1)*60,0)))
来源:https://stackoverflow.com/questions/57711191/excel-forumula-adding-working-hours-to-date-and-time