Excel不使用VBA统计当月工作日序号的方法咨询
实现方案
该需求完全可以不用VBA实现,用Excel自带函数即可满足要求,适配Excel 2010及以上全版本,WPS表格也通用。
基础方案(仅排除周末,不需要剔除法定节假日)
适用于不需要额外排除法定节假日的场景,直接在B列首个数据单元格(假设A列日期从A2行开始,B2是首个要填充的单元格)输入以下公式,之后下拉填充整列即可:
=IF(WEEKDAY(A2,2)>5,"",NETWORKDAYS(EOMONTH(A2,-1)+1,A2))
- 公式说明:
WEEKDAY(A2,2):按照周一为1、周日为7的规则返回当前日期对应的周内序号,返回值大于5即为周末,直接返回空值EOMONTH(A2,-1)+1:自动计算当前日期对应月份的1号日期,不用手动修改月份参数NETWORKDAYS:自动统计两个日期间的工作日数量,刚好对应当月的工作日累加序号,新月份会自动从1重新计数
进阶方案(需要额外剔除法定节假日)
如果需要把法定节假日也排除在工作日之外,提前把对应年份的法定节假日整理到表格空白列,例如存放在D列的D2:D100区域,修改公式为:
=IF(WEEKDAY(A2,2)>5,"",NETWORKDAYS(EOMONTH(A2,-1)+1,A2,$D$2:$D$100))
- 注意:节假日区域要加绝对引用符号
$,避免公式下拉时区域偏移
注意事项
- A列的日期需要为Excel标准日期格式,若为文本格式需要先转换为日期格式再使用公式,否则会出现计算错误
内容的提问来源于stack exchange,提问作者user14039142
相关产品推荐
相关产品推荐

