2017-09-15 47 views
0

我有一个请求,我试图确定我们是否打开了我们公司的门票。基本上我们必须在下一个工作日之内回复案件,这里的例外是如果票在周五18:00之后打开,我们要等到周二结束的时​​候18:00Excel IF critreria

所以我最初的想法是如果门票: 1)门票未打开,周五,周六,周日如果回复时间少于24分钟,我们将在周五18:00后打开门票,直到周二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 

任何建议的一个例子,我也要去包装成VBA这让宏做这一切工作。

要知道,我只是一个初学者,中间在Excel和VBA - 对不起

+0

使用日期/时间戳记,你应该能够做到这一点。 2017/01/01 15:20的长戳可以评估为开始时间,然后您确定您是否在2017/01/04 15:20之前完成。您可以使用日期字符串和时间字符串或日期时间字符串进行评估。以你的榜样为例,“日”有希望有一个数字,否则你可能需要改变你的评估方式,而周一= 1,周二= 2等。 – Cyril

+0

我刚刚意识到别的事情,我不能简单地在本周的其余时间做简单的计算。如果星期二18:01发生病例,那么我会在周四16:00之前回复。不知道这是否有意义,但似乎比我原先认为的复杂一点 – user2429563

+0

感谢Cyril - 我有一个这种格式的列,我解析了所有的东西:1/17/2017 9:02: 21 AM – user2429563

回答

1

你要去,如果你可以输入你的票开放时间为日期会更好,然后用VBA函数计算到期日。然后,您可以计算机票关闭日期并进行比较,或计算时间差异并进行比较。假设你实际上并不需要每月的一天,因为你只关心一周中的某一天,但最好包括如下所示的月份中的一天。

enter image description here

编辑 的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 

这给了下面的结果... enter image description here

它并不真正的问题,但如果你好奇的日期格式这里是我使用的自定义格式。

enter image description here