返回自上次出现字符串以来仅在一周中某些天发生的返回时间

时间:2015-06-18 19:54:27

标签: excel

我正在制作一份日程安排表。我想计算自从一个人上次安排在3个不同的工作之一以来的几周内的距离。我只想看看自上周末有人上次安排的时间,并且可能会在工作日安排个人在上周末之间进行干预。

例如:

Date    Day_of_week Task_a  Task_b  Task_c  Distance_a  Distance_b  Distance_c
7/1/2015    Wednesday   Ed      Mary    Amy     0   0   0
7/2/2015    Thursday    Bill    Judy    Bob     0   0   0
7/3/2015    Friday      Ed      Mary    Amy     0   0   0
7/4/2015    Saturday    Ed      Mary    Amy     0   0   0
7/5/2015    Sunday      Ed      Mary    Amy     0   0   0
7/6/2015    Monday      Bill    Mary    Bob     0   0   0
7/7/2015    Tuesday     Ed      Judy    Amy     0   0   0
7/8/2015    Wednesday   Ed      Amy     Bob     0   0   0
7/9/2015    Thursday    Bob     Ed      Judy    0   0   0
7/10/2015   Friday      Ed      Bob     Judy    0   0   0
7/11/2015   Saturday    Ed      Bob     Judy    7   0   0
7/12/2015   Sunday      Ed      Bob     Amy     7   0   7

为3个任务中的每个任务提供正确的距离,首先是单元格标签,然后是每个日期的新数据行。

对于距离A,我尝试过:

{=IF(AND(B3="Saturday", (A3-MAX(IF($C$2:E2=C3, $A$2:A2, 0)))/7 <53),  (A3-MAX(IF($C$2:E2=C3, $A$2:A2, 0)))/7, ".")}

在每个星期六(按预期)返回一个值,但无法扫描过去最近的工作日分配,给出错误的低值。我尝试了其他IF(OR) & IF(AND)语句,但第一次失败会生成错误值,从而有效地停止该程序。

对代码的任何帮助以及将示例格式化为.csv或制表符分隔值都将不胜感激。

1 个答案:

答案 0 :(得分:0)

好的,只需回顾一下,您需要计算从当前日期到周末安排的上一个工作日期的距离。 条件是: -

Current date must fall on a weekend
Previous date must also be on a weekend
Previous date must not be on same weekend as current date
Must be same person.

我发现使用WEEKDAY函数更容易检查日期是否属于周末,所以把这些全部放在一起得到: -

=IF(WEEKDAY($A3,16)>=3,"",
    IF(MAX($A$2:$A2*(C$2:C2=C3)*(WEEKDAY($A$2:$A2,16)<3)*(($A3-$A$2:$A2)>1))=0,"",
      INT(($A3-MAX($A$2:$A2*(C$2:C2=C3)*(WEEKDAY($A$2:$A2,16)<3)*(($A3-$A$2:$A2)>1))+1)/7)
    )
  )

使用 Ctrl Shift 输入

作为第3行中的数组公式输入

我认为你的公式的一般逻辑是正常的,但是OR和AND函数在数组公式中不能很好地工作,所以我用乘法代替了AND。

目前,这只检查出现在相同列中的人,因此如果需要检查三列,我会发布另一个版本。

enter image description here