无需VBA:如何用动态数组实现多团队多班次日程循环生成?
解决方案:动态生成跨团队连续日程列表
核心公式(Excel 365/2021 适用)
假设左侧开班数据区域为 A2:C5(团队、班次、开班日期),右侧课程结构区域为 E2:H12(团队、事件、Tstart、Duration),在目标单元格(如J2)输入以下公式:
=TOCOL(BYROW(FILTER(A2:C5,C2:C5<>""),LAMBDA(x, LET( team,INDEX(x,1), batch,INDEX(x,2), start_date,INDEX(x,3), course, FILTER(E2:H12,E2:E12=team), events, INDEX(course,,2), t_starts, INDEX(course,,3), durations, INDEX(course,,4), event_dates, start_date + t_starts, HSTACK( REPT(team,ROWS(course)), REPT(batch,ROWS(course)), events, event_dates, event_dates + durations - 1, durations ) ))),3)
公式逻辑拆解
FILTER(A2:C5,C2:C5<>""):筛选出所有包含开班日期的有效班次记录BYROW(...,LAMBDA(x,...)):遍历每个有效班次,单独生成对应日程LET(...):定义变量简化公式,提取当前班次的团队、班次号、开班日期,再筛选出该团队的全部课程结构- 计算事件时间:
event_dates为事件开始日期(开班日期 + Tstart),event_dates + durations - 1为事件结束日期 HSTACK(...):将团队、班次、事件名称、开始/结束日期、时长合并为完整的日程行TOCOL(...,3):将所有班次生成的二维日程数据扁平化,自动忽略空值,形成连续无间隔的日程列表
使用说明
- 手动添加表头:在目标区域首行(如
J1:N1)输入「团队」「班次」「事件」「开始日期」「结束日期」「时长」 - 调整区域引用:根据实际表格的单元格位置,修改公式中的
A2:C5(开班数据)和E2:H12(课程结构)引用范围 - 自动溢出:公式输入后会自动向下溢出所有生成的日程,无需手动拖拽或调整行数
内容的提问来源于stack exchange,提问作者Mike B
相关产品推荐
相关产品推荐

