【问题标题】:Excel Date difference without weekend daysExcel 没有周末的日期差异
【发布时间】:2019-02-06 11:53:59
【问题描述】:

上次我发布了一个关于我尚未解决的日期差异挑战的非常模糊的故事。我会尝试详细说明,因为我已经尽我所能尝试了所有方法,但问题仍然没有解决。

我目前有三列。

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

*使这个案例变得困难的是只包括工作日

所以,例如:

如果汽车开始维修8 月 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)))))

换句话说:
如果 startdate = Monday 然后 startdate + 11,
如果 startdate = 星期二,则 startdate + 12,等等。

这可行,我有 300 多行,向下拖动此函数不会更改单元格引用。

我知道NETWORKDAYSWEEKDAY 函数,但我遇到的任何星期一只有1 个周末过去,而其他日子只有2 个周末过去。

【问题讨论】:

  • 你确定自动计算开启了吗?尝试 F9 手动重新计算,如果它仍然没有“下拉”,请告诉我
  • 那么=WORKDAY(start_date,days,holidays) 不行吗?
  • 这听起来正是 WORKDAY 函数的设计目的,尽管您可能需要从天数中减去 1
  • @Hambone,f9 确实有效。但是,此功能可能不是解决问题的最佳方法,对吧?例如,如果 SLA 发生变化,则需要调整整个公式。 @JvdV 和 @Ron Rosenfeld,这很完美,谢谢!使用工作日功能,我结束了一天,所以我最终使用了=WORKDAY(A1-1;B1)。非常感谢大家!
  • @joopert 这意味着需要一 (1) 天的工作将在同一天开始和结束。因此,如果这是您所期望的,那么您的解决方案就是正确的。

标签: excel date if-statement weekday


【解决方案1】:

首先,我假设您的第一天 - 无论是哪一天 - 都被视为第一天 (1)。所以在我的场景中,如果 SLA 规定需要 2 天才能完成修复,并且 开始日期星期一,我假设修复应该在 之前完成>星期二

我的假设是基于@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])
    • 我们使用WEEKDAY 函数在上一个要点中找到了我们的lookup_value。现在我们希望 Excel 在我们的公式中使用 lookup_vector - {1;2;3} 来找到要添加到公式第一部分的正确值(在我们的公式中使用 [result_vector] - {2;1;0} 找到)。
    • lookup_vector 只有三个值:1、2 和 3。
    • 星期六 1 个信号
    • 2 个周日信号
    • 其他日子 3 个信号
  • lookup_vector[result_vector] 想象成一个矩阵/表格,从中可以找到我们的值:
    • 1   2
    • 2   1
    • 3   0
  • 如果我们的维修天数促使我们:
    • 星期六 (1),公式加 2。
    • 星期天 (2),公式加 1。
    • 任何工作日,公式加0(因为工作日可以接受)。

希望所有这些都有意义。祝你好运!

【讨论】:

    猜你喜欢
    • 2012-09-04
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    相关资源
    最近更新 更多