【问题标题】:Calculating the Number of Weekday Hours between Two Dates in Excel在 Excel 中计算两个日期之间的工作日小时数
【发布时间】:2018-12-03 17:48:39
【问题描述】:

我正在尝试确定有多少期间 两个瞬间之间是一个工作日 (由 Excel 的 NETWORKDAYS 函数确定)。 例如,星期二晚上 11 点之间的“工作日时间” 下一个星期三凌晨 2 点是 3 小时。 周五晚上 11 点到周一凌晨 2 点同上。 所以如果开始时间是星期五晚上 8 点 结束时间是周六或周日的任何时间, 答案应该是 4 小时—— 属于周末的区间部分 (或假期)应该被忽略 (或从端到端持续时间中减去)。

此问题的底部说明了更多示例。

我在这里找到了很多东西,但它们处理的是 SQL、代码等,而不是 Excel 中的大量内容。我确实找到了this,但它并没有直接帮助我。

我将这个用于公式:

=NETWORKDAYS(F2,G2,Q$2:Q$7)-1-MOD(F2,1)+MOD(G2,1) 

下面是发生了什么。

我在这里错过了什么?

【问题讨论】:

    标签: excel datetime excel-formula formula


    【解决方案1】:

    首先,您缺少一个明确的问题陈述。 “工作日小时数”是多少 周五中午到周六中午之间?

    好的,我猜你是在 说明你想要的底部图片。

    为了不那么刻薄,你错过了什么 (您似乎没有注意到的) 就是,在所有你说结果错误的例子中 (在这些情况下), 您的开始日期/时间 (F<i>n</i>) 或您的结束日期/时间 (G<i>n</i>) 是星期六或星期日。 (尝试使用格式<b>ddd</b> mm-dd-yyyy h:mm:ss 而不是mm-dd-yyyy h:mm:ss。) NETWORKDAYS(Wednesday,Friday)3。 但是NETWORKDAYS(Wednesday,Saturday)NETWORKDAYS(Wednesday,Sunday) 也是3

    举第一个例子:星期二 07-03-2018 15:44:16 通过 周日 07-08-2018 20:09:56。 NETWORKDAYS(Tuesday,Sunday) 通常是 4 (周二、周三、周四和周五;忽略周末), 但NETWORKDAYS(Tuesday 07-03,Sunday 07-08)3 因为07-04假期。 所以你的公式是 3-1-(15:44:16)+(20:09:56), 或 2+(20:09:56-15:44:16),或 2 天和 4:25:40, 等于 52:25:40,这是 Excel 给你的。 您没有考虑到以下事实

    your_formula(2018 年 7 月 3 日星期二 15:44:16,2018 年 7 月 8 日星期日 20:09:56)
    等于
    your_formula(2018 年 7 月 3 日星期二 15:44:16,星期五 07-06-2018 年 20:09:56) 
    省略 Fri 07-06-2018 20:09:56 之间的 3:50:04 和星期五 07-06-2018 24:00:00 — 而且,你瞧,3:50:04 是差异的数量。

    更清楚的是第三行, 其中开始日期/时间是 Sat 07-21-2018 6:30:12, 差异是 6:30:12。


    我找到了一个基于 NETWORKDAYS(<i>some_date</i>, <i>the_<b>same</b>_date</i>, <i>(holidays)</i>) 的解决方案 如果日期是工作日,则为 1,如果不是,则为 0。 所以

    =NETWORKDAYS(F2,G2,Q$2:Q$7)-NETWORKDAYS(G2,G2,Q$2:Q$7)-NETWORKDAYS(F2,F2,Q$2:Q$7)*MOD(F2,1)+NETWORKDAYS(G2,G2,Q$2:Q$7)*MOD(G2,1)
    

    会给你想要的结果。

    【讨论】:

      【解决方案2】:

      您需要考虑到间隔的开始和结束日期可能在周末(或节假日)。在这种情况下,不应应用 MOD 条款。试试这个:

      =(NETWORKDAYS(F2,G2,$Q$2:$Q$6)-IF(AND(WEEKDAY(F2,2)<6,ISNA(MATCH(INT(F2),$Q$2:$Q$6,0))),MOD(F2,1),0)+IF(AND(WEEKDAY(G2,2)<6,ISNA(MATCH(INT(G2),$Q$2:$Q$6,0))),MOD(G2,1)-1,0))
      

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        您的公式高度依赖于控制输入数据。目前,您的公式仅在日期范围内的第一天和最后一天是工作日时才有效。这是由于MOD(F2,1)+MOD(G2,1) 占用了您范围内第一天和最后一天的剩余部分。如果他们碰巧是非工作日,那么您的公式将是错误的。

        将您的公式与answer here 中找到的信息相结合,您可以根据您所拥有的内容来制作您想要的公式。

        这里:

        =NETWORKDAYS(IF(WEEKDAY(F2)<5,F2,WORKDAY(F2,1,holidays)),IF(WEEKDAY(G2)<5,G2,WORKDAY(G2,-1,holidays)),holidays)-IF(WEEKDAY(F2,2)<6,MOD(F2,1),1)+IF(WEEKDAY(G2,2)<6,MOD(G2,1),0)
        

        这会检查工作日范围内的第一个日期,如果不是,则移至下一个日期。然后检查工作日的结束日期,如果没有,则提前。然后调整余数,如果它们恰好是工作日。

        与您的原始公式完全相同,但添加了对日期本身的检查。对“假期”的引用可以替换为您的单元格引用。为了方便起见,我只是使用了一个命名范围。

        编辑:WEEKDAY(F2)&lt;5 可能需要替换为 WEEKDAY(F2,2)&lt;6,以确保您使用的是周一开始的工作周。

        【讨论】:

          猜你喜欢
          • 2018-08-03
          • 2010-09-20
          • 2012-02-13
          • 1970-01-01
          • 2014-10-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多