没有周末的Excel日期差

时间:2018-08-31 12:35:48

标签: excel date if-statement weekday

上一次,我发布了一个关于日期差的挑战的模糊故事,但尚未解决。我将尽力而为,因为我已尽力尝试了所有问题,但问题仍未解决。

我目前有三栏。

  • 第1列(F
    • 汽车开始维修的日期(格式DayOfWeek-DD-MM-YYYY)
  • 第2列(G
    • 汽车修理的天数(服务水平协议[SLA];标准为10天)
  • 第3列(H
    • 输出,即汽车应完成的日期。所以开始日期之后的天数*

*造成这种情况困难的原因是仅包含工作日

因此,例如:

如果汽车 在八月的 1月1日 st 开始维修 ,则 完成日期 8月14日(星期二)

我试图用以下公式解决这个问题:

=IF(WEEKDAY(F218)=2;(F218+11);
IF(WEEKDAY(F218)=3;F218+12;
IF(WEEKDAY(F218)=4;F218+13;
IF(WEEKDAY(F218)=5;F218+14;
IF(WEEKDAY(F218)=6;F218+15)))))

换句话说:
如果开始日期=星期一,则开始日期+ 11
如果开始日期=周二,则开始日期+ 12,依此类推。

这行得通,但是,我有300多行,并且向下拖动此功能不会更改单元格引用。

我了解NETWORKDAYSWEEKDAY函数,但是在任何仅通过 1 周末的星期一和其他通过 2 周末通行证。

1 个答案:

答案 0 :(得分:0)

首先,我假设您的第一天(无论可能是哪一天)都被视为第一天(1)。因此,在我的情况下,如果SLA声明需要2天才能完成维修,并且开始日期 Monday ,那么我假设维修应该在星期二

我的假设基于@RonRosenfeld的评论:

  

...尽管您可能需要从天数中减去1


话虽如此,请在您的单元格中尝试以下公式:
注意:您可能需要更改逗号和分号等内容以适应您所在的地区。

=WORKDAY($F2,$G2-1)+LOOKUP(WEEKDAY(WORKDAY($F2,$G2-1),16),{1;2;3},{2;1;0})

功能:

  • WORKDAY($F2,$G2-1)
    • 首先,我们要弄清楚如果包括周末(周六和周日),应该在哪一天完成。公式的这一部分将为我们提供一个起点。
    • $F2是您的维修开始日期
    • $G2是应该进行维修的天数(您可能需要为此添加一列,因为如您所述,SLA可能会更改,并且您需要轻松调整公式)
  • WEEKDAY(WORKDAY($F2,$G2-1),16)
    • 上方的WORKDAY函数包装在WEEKDAY函数内部。编写此WEEKDAY函数的目的是为一周中的每一天分配编号。 [return_type]的参数16告诉Excel将其标记为“数字1(星期六)至7(星期五)” 。我们选择16是为了使我们的LOOKUP函数更易于编写。公式的此部分仅返回一个数字,该数字将用于确定除周末外,我们实际上想要的是星期几。
  • LOOKUP(WEEKDAY(WORKDAY($F2,$G2-1),16),{1;2;3},{2;1;0})
    • 我们使用函数的第一种形式通过添加来自LOOKUP函数的结果来完成公式:
      LOOKUP(lookup_value,lookup_vector,[result_vector])
    • 我们使用lookup_value函数在上一个要点找到了WEEKDAY。现在,我们希望Excel在公式中使用lookup_vector-{1;2;3}-来找到要添加到公式第一部分的正确值(使用[result_vector]-{{ 1}})。
    • {2;1;0}仅具有三个值:1、2和3。
    • 星期六有1个信号
    • 周日2个信号
    • 其他所有时间都发出3次信号
  • lookup_vectorlookup_vector看作是一个矩阵/表,从中可以找到我们的值:
    • 1 2
    • 2 1
    • 3 0
  • 如果我们的维修天数促使我们:
    • 星期六(1),公式加2。
    • 星期日(2),公式加1。
    • 任何工作日,该公式加0(因为可以接受工作日)。

希望所有这些都是有道理的。祝您好运!