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

请求协助:O365桌面版批量生成日期区间关联明细

O365 日期区间展开并关联人员信息的解决方案

针对你1000行含姓名、起止日期、缺勤类型的数据展开需求,以下两种O365原生方法可直接实现,无需复杂VBA:

方法一:动态数组公式(一步生成结果)

假设原始数据表头在A1:D1(A=姓名,B=startdate,C=enddate,D=缺勤类型),数据行从A2到D1001。在空白单元格(比如F1)输入以下公式,按回车后自动生成所有展开行:

=LET(
    数据源, A2:D1001,
    姓名列, INDEX(数据源,,1),
    开始日期列, INDEX(数据源,,2),
    结束日期列, INDEX(数据源,,3),
    缺勤类型列, INDEX(数据源,,4),
    生成日期序列, MAP(开始日期列, 结束日期列, LAMBDA(s,e, SEQUENCE(e-s+1,1,s))),
    重复姓名, MAP(姓名列, 结束日期列, 开始日期列, LAMBDA(n,e,s, REPT(n&"|", e-s+1))),
    重复类型, MAP(缺勤类型列, 结束日期列, 开始日期列, LAMBDA(t,e,s, REPT(t&"|", e-s+1))),
    HSTACK(
        TEXTSPLIT(TEXTJOIN("|",,重复姓名), "|",,TRUE),
        TOCOL(生成日期序列, 1),
        TEXTSPLIT(TEXTJOIN("|",,重复类型), "|",,TRUE)
    )
)

额外处理:去重

如果原始数据有重复行,展开后需要去重,只需将公式包裹在UNIQUE()函数中:

=UNIQUE(LET(
    数据源, A2:D1001,
    姓名列, INDEX(数据源,,1),
    开始日期列, INDEX(数据源,,2),
    结束日期列, INDEX(数据源,,3),
    缺勤类型列, INDEX(数据源,,4),
    生成日期序列, MAP(开始日期列, 结束日期列, LAMBDA(s,e, SEQUENCE(e-s+1,1,s))),
    重复姓名, MAP(姓名列, 结束日期列, 开始日期列, LAMBDA(n,e,s, REPT(n&"|", e-s+1))),
    重复类型, MAP(缺勤类型列, 结束日期列, 开始日期列, LAMBDA(t,e,s, REPT(t&"|", e-s+1))),
    HSTACK(
        TEXTSPLIT(TEXTJOIN("|",,重复姓名), "|",,TRUE),
        TOCOL(生成日期序列, 1),
        TEXTSPLIT(TEXTJOIN("|",,重复类型), "|",,TRUE)
    )
))

方法二:Power Query(可视化操作,适合新手)

  1. 选中原始数据区域,点击数据选项卡 → 从表格/区域,确认表头存在后加载到Power Query编辑器
  2. 点击添加列 → 自定义列,输入以下公式生成日期列表:
    =List.Dates([startdate], Duration.Days([enddate]-[startdate])+1, #duration(1,0,0,0))
    
  3. 选中新生成的自定义列,点击转换选项卡 → 展开到新行
  4. 可选:删除原startdate和enddate列,调整列顺序
  5. 点击关闭并上载,结果会自动生成到新工作表

这两种方法都能自动适配每月行数变化,处理1000行数据完全无压力。

内容的提问来源于stack exchange,提问作者Vojtěch Babka

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 18:22:37