我正在尝试确定这段时期内的多少
在工作时间的两个瞬间之间
(由Excel的NETWORKDAYS
函数确定)。
例如,星期二11点PM之间的“工作日时间”
而接下来的星期三2点AM是3小时。
同上周五晚上11点至下午2点。
因此,如果开始时间是星期五晚上8点
并且结束时间是任何时间在星期六或星期日,
答案应该是4小时-
周末的时间间隔部分
(或假期)应忽略
(或从端到端持续时间中减去)。
该问题的底部说明了更多示例。
我在这里发现了很多东西,但是它们处理的是SQL,代码等,而在Excel中却很少。我确实找到了this,但并没有直接帮助我。
我将其用于公式:
=NETWORKDAYS(F2,G2,Q$2:Q$7)-1-MOD(F2,1)+MOD(G2,1)
和下面是怎么回事。
我在这里想念什么?
答案 0 :(得分:1)
对于初学者来说,您缺少明确的问题说明。 “工作日时间”是多少? 在星期五中午到星期六中午之间?
好的,我想您是在底部图片中说明。
为了减少疑惑,您缺少了什么
(您出现没有注意到的内容)
是,在所有您说结果错误的示例中
(在这些情况下,仅),
您的开始日期/时间(Fn
)
或您的结束日期/时间(Gn
)
是星期六或星期日。
(尝试使用格式ddd mm-dd-yyyy h:mm:ss
而不是mm-dd-yyyy h:mm:ss
。)
NETWORKDAYS(Wednesday,Friday)
是3
。
但是NETWORKDAYS(Wednesday,Saturday)
和NETWORKDAYS(Wednesday,Sunday)
也是3
。
以您的第一个示例为例:星期二:2018年7月3日15:44:16
通过 Sun 到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(Tue 07-03-2018 15:44:16, Sun 07-08-2018 20:09:56)等于
your_formula(Tue 07-03-2018 15:44:16, Fri 07-06-2018 20:09:56)省略了星期五 07- 06 -2018 20:09:56之间的3:50:04 和星期五07-06-2018 24:00:00 — 并且,瞧,差异是3:50:04。
第三行更加清晰, 开始日期/时间为2018年7月21日星期六 6:30:12 , 差异为6:30:12。
我基于NETWORKDAYS(some_date, the_same_date, (holidays))
这一事实找到了解决方案
如果日期是工作日,则为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)
将为您提供所需的结果。
答案 1 :(得分:0)
您需要考虑到间隔的开始和结束日期可能是在周末(或假日)。在这种情况下,不应应用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))
希望有帮助。
答案 2 :(得分:0)
您的公式高度依赖于控制输入数据。当前,仅当日期范围内的第一天和最后一天是工作日时,您的公式才起作用。这是由于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)<5
可能需要替换为WEEKDAY(F2,2)<6
,以确保您在星期一开始的工作周工作。