我正在尝试获取一周的总工作天数,但也考虑到一周有 2 个独立的月份,天数应该只显示当月的天数。 即
Week Ending
09/07/2023 - 5 Days
16/07/2023 - 4 days
23/07/2023 - 5 Days
30/07/2023 - 5 Days
06/08/2023 - 1 Day (since 31/07/2023 is a part of Aug week)
我尝试放置正常的
NETWORKDAYS(E50,F50,$H$49:$H$61)
,但它只使用开始日期和结束日期,但没有考虑其中的几周可以有几个月。
从问题中不清楚真实的情况,对于
7/16/2016
,我预计输出中有5
天,因为一周中的所有天都是同一个月的一部分,即我会说4
是拼写错误。我希望这个想法适用于您的实际情况,如果情况并非如此,请更新问题并让我知道。谢谢。
您可以手动计算如下。以下公式一次性溢出整个结果(公式 1):
=MAP(A2:A6-6, LAMBDA(s,SUM(N(MONTH(s+SEQUENCE(5,,0))=MONTH(s)))))
您可以使用
NETWORKDAYS
来获取数组解决方案,也许不太直观。这个想法是正确构建假期列表,如果月份不同,则排除该范围内的日期,或者在月份相同时定义范围外的日期(e+1
或e
,因为它是星期日,即非工作日):
=LET(end,A2:A6, MAP(end-6,end, LAMBDA(s,e,
NETWORKDAYS(s,e, IF(MONTH(s+SEQUENCE(7,,0)) = MONTH(s),
e + 1, s + SEQUENCE(7,,0))))))
条件
A2:A6-6
查找给定日期集 (A2:A6
) 的前一个星期一,假设所有周末都是星期日。
注意:对于一般情况,要获取给定日期的前一个星期一(不一定是星期日),您可以使用:
A2:A6-WEEKDAY(A2:A6)-5
。
对于 公式 1,我们使用
MAP
函数来迭代所有开始日期 (s
)。它假设工作日是从周一到周五,因此要生成它使用的一周中的每个工作日:s+SEQUENCE(5,,0)
。它使用 MONTH
函数来识别与 s
属于同一个月的工作日。我们使用 N()
将比较转换为 0
、1
值,最后使用 SUM
函数将当月的工作日计算为给定的开始日期 s
。