我正在制作一份日程安排表。我想计算自从一个人上次安排在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或制表符分隔值都将不胜感激。
答案 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。
目前,这只检查出现在相同列中的人,因此如果需要检查三列,我会发布另一个版本。