如何编写SharePoint列表排除周末及公休日的工作日计数公式
你已经掌握排除周末的基础计数逻辑,直接补充节假日扣减部分即可,根据节假日维护需求选对应实现方式:
方案1:固定节假日直接内嵌公式(适合节假日少、变动少的场景)
SharePoint内置的NETWORKDAYS函数原生支持第三参数传入待排除的节假日日期,直接把所有需要扣减的法定节假日用DATE(年,月,日)格式写在参数里即可,不需要额外建列表。
完整公式示例(以2023年法定节假日为例):
=IF( AND(ISNUMBER([开始日期]),ISNUMBER([结束日期]),[结束日期]>=[开始日期]), NETWORKDAYS( [开始日期], [结束日期], DATE(2023,1,1), DATE(2023,1,2), DATE(2023,1,3), DATE(2023,4,5), DATE(2023,5,1), DATE(2023,5,2), DATE(2023,5,3), DATE(2023,6,22), DATE(2023,9,29), DATE(2023,10,1), DATE(2023,10,2), DATE(2023,10,3) ), 0 )
注意:该方案需要每年手动更新公式内的节假日日期,春节、中秋这类农历浮动节假日,直接把当年对应的公历日期补入参数列表即可。如果遇到周末和节假日重叠的情况,
NETWORKDAYS不会重复扣减,不需要额外处理。
方案2:动态维护节假日(适合节假日多、需要频繁更新的场景)
如果不想每年改公式,可以单独建节假日配置表实现动态扣减,步骤如下:
- 新建独立列表命名为「公共节假日配置表」,只需要保留2个核心列:
- 节假日名称:单行文本类型,备注节假日属性
- 节假日日期:日期/时间类型,仅存储日期、不保留时间,把所有需要扣减的法定节假日提前录入该列表
- 回到需要计算工作日的业务列表,新建查找类型列,命名为「区间匹配节假日」:
- 查找源选择刚建好的「公共节假日配置表」
- 查找字段选择「节假日日期」
- 开启「允许多个值」
- 配置列筛选规则:节假日日期 大于等于 当前项目的[开始日期],且 节假日日期 小于等于 当前项目的[结束日期],且 WEEKDAY(节假日日期,2) < 6 —— 该规则会自动过滤掉落在周末的节假日,避免重复扣减
- 新建计算列存储最终工作日结果,公式直接在你原有排除周末的计数结果上,减去匹配到的节假日数量即可:
=IF(AND(ISNUMBER([开始日期]),ISNUMBER([结束日期])),NETWORKDAYS([开始日期],[结束日期]) - COUNTA([区间匹配节假日]),0)
注意:计算列返回类型选「数字」,小数位数设为0即可。如果有调休补班的周末,不需要额外调整公式,只要不把补班日期录进节假日配置表,
NETWORKDAYS本身会自动把周末排除,补班的日期手动在对应条目的计算结果里+1即可,或者单独建补班配置列做累加。
内容的提问来源于stack exchange,提问作者Olha Pavlovska
相关产品推荐
相关产品推荐

