Excel如何统计指定日期区间内特定星期几的天数
Excel 统计指定日期区间内特定星期几的天数
原有公式错误原因
=SUMPRODUCT(WEEKDAY(B4:C4)=2)返回0的核心原因:公式仅对B4、C4两个单元格存储的起止日期本身做星期判断,不会自动遍历两个日期之间的所有日期,自然无法统计整个区间的符合条件天数。=NETWORKDAYS.INTL(B4;C4;"1000000")返回25的核心原因:该函数的7位周末字符串规则为从左到右依次对应周一、周二、周三、周四、周五、周六、周日,字符1代表当日不计入统计,0代表当日计入统计。你输入的"1000000"是将周一设为不计入的休息日,周二到周日全部计入,统计结果自然是区间内周二到周日的总天数,和统计周一的需求完全相反。另外注意部分中文版本Excel的函数参数分隔符为逗号,使用分号可能触发计算异常。
正确实现方法
方法1:NETWORKDAYS.INTL 函数(写法最简洁,兼容所有主流Excel版本)
统计周一数量的公式如下(如果你的Excel用分号做参数分隔符,把公式里的逗号换成分号即可):
=NETWORKDAYS.INTL(B4,C4,"0111111")
自定义周末字符串规则:7位字符从左到右严格按「周一→周二→周三→周四→周五→周六→周日」排序,需要统计哪个星期几,就把对应位置的字符写为0,其余位置全部写1。
例:统计周三总数用"1101111",统计周日总数用"1111110"
以你提到的2022-02-01至2022-03-01区间为例,实际周一为2月7日、14日、21日、28日共4天,代入公式返回结果为4,和实际值一致。
方法2:SUMPRODUCT 函数(适合叠加额外判断规则的场景)
如果后续需要叠加排除法定节假日、排除标记特殊日期等判断逻辑,可以用SUMPRODUCT生成完整日期序列遍历统计,公式如下:
=SUMPRODUCT(--(WEEKDAY(ROW(INDIRECT(B4&":"&C4)),2)=1))
公式逻辑说明:
ROW(INDIRECT(B4&":"&C4))会自动生成从起始日期到结束日期的所有日期序列值WEEKDAY(...,2)将返回规则设为1=周一、2=周二……7=周日,符合日常计数习惯,避免默认参数的星期计数偏差- 前缀
--将逻辑判断生成的TRUE/FALSE值转为1/0数值,供SUMPRODUCT求和统计
同样代入2022-02-01至2022-03-01区间,统计周一的返回结果为4,计算准确。
内容的提问来源于stack exchange,提问作者Alex Ironside
相关产品推荐
相关产品推荐

