你要去,如果你可以输入你的票开放时间为日期会更好,然后用VBA函数计算到期日。然后,您可以计算机票关闭日期并进行比较,或计算时间差异并进行比较。假设你实际上并不需要每月的一天,因为你只关心一周中的某一天,但最好包括如下所示的月份中的一天。
编辑 的VBA函数下面可以通过在工作表公式来实现同样的功能:
=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专栏票开日期和后强是你的假期列表。
使用这个基本上没有节假日的同样的事情的VBA函数可能会也可能不会更容易/更好。 VBA功能对未来的编程更友好。
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
这给了下面的结果...
它并不真正的问题,但如果你好奇的日期格式这里是我使用的自定义格式。
使用日期/时间戳记,你应该能够做到这一点。 2017/01/01 15:20的长戳可以评估为开始时间,然后您确定您是否在2017/01/04 15:20之前完成。您可以使用日期字符串和时间字符串或日期时间字符串进行评估。以你的榜样为例,“日”有希望有一个数字,否则你可能需要改变你的评估方式,而周一= 1,周二= 2等。 – Cyril
我刚刚意识到别的事情,我不能简单地在本周的其余时间做简单的计算。如果星期二18:01发生病例,那么我会在周四16:00之前回复。不知道这是否有意义,但似乎比我原先认为的复杂一点 – user2429563
感谢Cyril - 我有一个这种格式的列,我解析了所有的东西:1/17/2017 9:02: 21 AM – user2429563