You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Excel多员工跨月出差日期去重计算天数公式求助

解决Excel中员工有效出差天数计算问题

针对你提到的需求——去重同一员工的重复日期、包含起止日期、处理跨月出差,这里分两种Excel版本给出解决方案,优先推荐新版Excel的简洁公式:

一、适用于Excel 365/2021(支持动态数组和LET函数)

假设你的数据结构是:

  • A列:员工ID(如1531)
  • B列:出差起始日期(需为Excel日期格式,若当前是文本可先用=DATEVALUE(B2)转换)
  • C列:出差结束日期(同格式要求)

计算指定员工(比如员工1531)的有效出差天数,可使用以下公式:

=LET(
    目标员工ID, 1531,
    员工出差记录, FILTER(A:C, A:A=目标员工ID),
    起始日期列, INDEX(员工出差记录,,2),
    结束日期列, INDEX(员工出差记录,,3),
    所有出差日期, TEXTSPLIT(TEXTJOIN(",",,SEQUENCE(结束日期列-起始日期列+1,1,起始日期列)),","),
    去重后日期, UNIQUE(所有出差日期),
    COUNT(去重后日期)
)

公式解释:

  1. 目标员工ID:替换成你要计算的员工ID,也可以直接引用单元格(比如A2)实现批量计算
  2. 员工出差记录:筛选出该员工的所有出差行数据
  3. 起始日期列/结束日期列:提取筛选结果里的起止日期
  4. 所有出差日期:把每个出差的日期范围展开成单个日期(比如2018/04/22到2018/05/02会生成从22号到次月2号的所有日期),再合并拆分统一格式
  5. 去重后日期:去除同一日期的重复记录
  6. COUNT(去重后日期):统计最终的有效出差天数

二、适用于旧版Excel(无动态数组支持)

如果你的Excel版本不支持LET和动态数组,可使用以下数组公式(输入完成后需按Ctrl+Shift+Enter触发):

=SUMPRODUCT(1/COUNTIF(INDEX(TEXT(ROW(INDIRECT(MIN(IF(A:A=1531,B:B))&":"&MAX(IF(A:A=1531,C:C)))),"DD/MM/YYYY"),N(IF(1,ROW(INDIRECT(MIN(IF(A:A=1531,B:B))&":"&MAX(IF(A:A=1531,C:C))))-MIN(IF(A:A=1531,B:B))+1))),INDEX(TEXT(ROW(INDIRECT(MIN(IF(A:A=1531,B:B))&":"&MAX(IF(A:A=1531,C:C)))),"DD/MM/YYYY"),N(IF(1,ROW(INDIRECT(MIN(IF(A:A=1531,B:B))&":"&MAX(IF(A:A=1531,C:C))))-MIN(IF(A:A=1531,B:B))+1)))))

注意事项:

  • 同样需要确保B/C列是日期格式,文本格式需先转换
  • 公式中的1531可替换为目标员工ID的单元格引用

验证你的示例场景

以员工1531为例:

  • 重复录入的2018/04/03会被UNIQUE(旧版是COUNTIF去重)处理,仅统计1次
  • 跨4-5月的出差(2018/04/22至2018/05/02)会被展开为完整的日期序列(共11天),全部计入统计

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

火山引擎 最新活动