You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel公式求助:跨月培训时段自动分月扣减工作日(含节假日)

嗨,我完全懂你的需求——不用手动把跨月培训日期拆成单日填表格,就能自动按月份扣减对应工作日,对吧?给你整理了两个实用方案,新手也能轻松上手:

方案一:直接计算每月扣减天数(无需拆分日期,全Excel版本通用)

这个方案不用拆分任何日期,直接通过公式计算每个月和培训范围的重叠工作日,然后从原结果里扣减,最省心。

假设你的表格结构是这样的:

  • A列:每个月的起始日期(比如A6是2024/8/1,A7是2024/9/1,以此类推)
  • B列:你原来的每月工作日计算公式:=NETWORKDAYS($A6,EOMONTH($A6,0),holidays!$C$4:$C$13)
  • D1单元格:培训开始日期(比如2024/8/15)
  • E1单元格:培训结束日期(比如2024/9/25)

在C列(用来放扣减后的最终工作日),输入以下公式,然后下拉填充到所有月份行:

=B6 - IF(MAX($A6, $D$1) > MIN(EOMONTH($A6,0), $E$1), 0, NETWORKDAYS(MAX($A6, $D$1), MIN(EOMONTH($A6,0), $E$1), holidays!$C$4:$C$13))

公式简单解释:

  • MAX($A6, $D$1):取「当月第一天」和「培训开始日」里更晚的那个,作为该月内培训的实际起始日期
  • MIN(EOMONTH($A6,0), $E$1):取「当月最后一天」和「培训结束日」里更早的那个,作为该月内培训的实际结束日期
  • 如果前者大于后者,说明这个月和培训范围完全不重叠,扣减0;否则用NETWORKDAYS计算这个重叠区间的工作日(同样扣除你指定的节假日),再从原工作日结果里减去这个数。
方案二:可视化拆分日期范围(适合Excel 365/2021)

如果你希望把培训的所有日期都拆出来可视化查看,可以用Excel的动态数组函数来自动生成日期序列,再按月份统计扣减天数。

  1. 生成培训日期序列:
    在空白列(比如F列)输入以下公式,会自动生成从培训开始到结束的所有日期:
=SEQUENCE($E$1 - $D$1 + 1, 1, $D$1)
  1. 匹配每个日期所属的月份:
    在F列旁边的G列,输入公式,给每个日期标记所属月份的第一天(方便后续按月份统计):
=DATE(YEAR(F2), MONTH(F2), 1)

Excel 365会自动溢出填充,不用手动下拉;旧版本则需要下拉填充到所有拆分出的日期行。

  1. 计算每个月需扣减的培训工作日:
    回到你的月份计算行,在C列输入以下公式,下拉填充:
=B6 - SUMPRODUCT(--(NETWORKDAYS.INTL(F:F, F:F, 1, holidays!$C$4:$C$13)=1), --(G:G=$A6))

公式简单解释:

  • NETWORKDAYS.INTL(F:F, F:F, 1, holidays!$C$4:$C$13)=1:判断拆分出的每个日期是否是工作日(非节假日),返回TRUE/FALSE,用--转成1/0
  • G:G=$A6:判断日期是否属于当前行的月份,同样转成1/0
  • SUMPRODUCT把两个数组相乘后求和,得到该月内培训的工作日总数,再从原工作日结果里减去这个数。
几个关键注意事项
  • 确保D1、E1以及节假日区域holidays!$C$4:$C$13的单元格都是日期格式,不是文本格式,否则公式会出错
  • 如果是Excel 2019及更早版本,没有SEQUENCE函数,优先用方案一
  • 若有多个培训范围,可以把公式里的$D$1和$E$1改成对应的单元格,新手先从单个范围入手更稳妥

内容的提问来源于stack exchange,提问作者sinensys

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:36:07