Excel IF critreria

我有一个要求,我试图确定我们是否打开我们公司的门票。 本质上,我们必须在下一个工作日内对案件作出回应,这里的例外情况是,如果在星期五18:00之后打开票,我们要等到星期二的结束18:00

所以我最初的想法是,如果一张票:1)票未打开,星期五,星期六,星期日,然后如果响应时间less于24,那么我们MET 2)星期五18:00之后打开一张票,那么直到EOD星期二18:00 – 星期五18:00到星期天23:59什么时间都没关系。 3)如果门票周五00:00-117:59开放,那么我们一直到周一18:00

问题是我不知道如何计算时间,在周五17:00开完一个案子,我们有72个小时的回应。 但是整个周末的任何时候都会有个案被打开,我如何从72中减去这个数字来决定我们是否会见。

这是我的表的一个例子

Month Year Day Time Hours Met/Miss January 2017 Wed 15:20 19.77 January 2017 Tue 9:02 2.04 January 2017 Tue 11:35 0 January 2017 Fri 10:37 0.19 January 2017 Fri 17:48 89.06 January 2017 Mon 0:33 0.03 

任何build议,我也打算把这个包装到VBA中,这样macros就可以完成所有这些工作。

应该知道,我只是一个在Excel和VBA中的初学者 – 中级 – 对不起

如果您可以input您的机票开放时间作为date,那么您将会变得更好,然后使用VBA函数计算到期date。 然后你可以计算一个票的closuresdate和比较,或计算一个时间差和比较。 假设你实际上并不需要每个月的一天,因为你只关心一周中的某一天,但最好包括如下所示的月份。

在这里输入图像说明

编辑下面的VBA函数的相同function可以通过工作表方程来实现:

=IF(WORKDAY(WORKDAY(H2,1,Holidays),-1,Holidays) = ROUNDDOWN(H2,0), WORKDAY(H2,IF(HOUR(H2)>=18,2,1),Holidays)+18/24, WORKDAY(WORKDAY(H2,-1,Holidays),2,Holidays) + 18/24)

H列有开票date,Hol是您的假期列表。

使用这个基本上没有节假日的同样的事情的VBAfunction可能会也可能不会更容易/更好。 VBAfunction对未来编程更友好。

 Function CalculateDueTime(OpenedTime As Date) Dim DueTime As Date Dim wkd As Integer wkd = Weekday(OpenedTime, vbSunday) If wkd = 1 Then 'Zero the hours, Add 2 days to get from Sunday to Tuesday, then get to 18:00 DueTime = DateAdd("h", 18, DateAdd("d", 2, DateAdd("h", -Hour(OpenedTime), OpenedTime))) ElseIf wkd = 7 Then 'Zero the hours, Add 3 days to get from Saturday to Tuesday, then get to 18:00 DueTime = DateAdd("h", 18, DateAdd("d", 3, DateAdd("h", -Hour(OpenedTime), OpenedTime))) Else 'Add an hours portion to see what day we arrive at 'The reason this works is because what you actually have is an offset in your end-of-day from midnight to EOB. 'So we're accounting for that offset by adding 6 hours then adding 24 to get to our due day, 'then defining 18:00 as our due time on that due day. DueTime = DateAdd("h", 6 + 24, OpenedTime) 'Whatever day we arrived at above, zero the hours and add 18 DueTime = DateAdd("h", 18, DateAdd("h", -Hour(DueTime), DueTime)) wkd = Weekday(DueTime, vbSunday) If wkd = 7 Or wkd = 1 Then 'If our due date lands on the weekend 'we can always resolve it by adding 2 days 'Opened Thur due Sat becomes due Mon 'Opened Friday due Sat becomes due Mon 'Opened Friday due Sunday becomes due Tues DueTime = DateAdd("d", 2, DueTime) End If End If CalculateDueTime = DueTime End Function 

这给了以下结果… 在这里输入图像说明

这并不重要,但如果您对date格式感兴趣,那么这里是我使用的自定义格式。

在这里输入图像说明