基于起止日期重复列单元格值的Google Sheets公式实现
实现员工休假数据的日期展开与对应字段重复
完整公式方案
直接使用以下公式即可生成包含姓名、休假类型、展开日期的完整表格(假设原始数据范围为B4:D32对应姓名、起始日期、结束日期,E4:E32对应休假类型):
=ARRAYFORMULA(QUERY({ FLATTEN(IF(DAYS(D4:D32,C4:C32)>=SEQUENCE(1,1000,0), B4:B32, "")), FLATTEN(IF(DAYS(D4:D32,C4:C32)>=SEQUENCE(1,1000,0), E4:E32, "")), FLATTEN(IF(DAYS(D4:D32,C4:C32)>=SEQUENCE(1,1000,0), C4:C32+SEQUENCE(1,1000,0), "")) }, "where Col3 is not null", 0))
公式说明
- 核心逻辑:通过
FLATTEN+IF的组合,分别将姓名、休假类型按照每条记录的休假天数重复,同时生成展开的日期序列,最终将三列数据合并为一个完整数组 DAYS(D4:D32,C4:C32)计算单条记录的总休假天数,SEQUENCE(1,1000,0)生成0到999的序列,覆盖最多1000天的休假周期;若需要支持更长休假,直接把1000替换为更大数值即可QUERY函数用于过滤日期为空的无效行,参数0表示不包含原始数据的表头;如果需要自动添加表头,可使用带表头的版本:
={"姓名","休假类型","日期"; ARRAYFORMULA(QUERY({ FLATTEN(IF(DAYS(D4:D32,C4:C32)>=SEQUENCE(1,1000,0), B4:B32, "")), FLATTEN(IF(DAYS(D4:D32,C4:C32)>=SEQUENCE(1,1000,0), E4:E32, "")), FLATTEN(IF(DAYS(D4:D32,C4:C32)>=SEQUENCE(1,1000,0), C4:C32+SEQUENCE(1,1000,0), "")) }, "where Col3 is not null", 0))}
使用注意事项
- 确保公式中的单元格范围(B4:E32)与实际数据范围一致,若数据行数变动,需对应调整范围参数
- 若存在超过1000天的超长休假,将
SEQUENCE(1,1000,0)中的1000替换为更大数值,比如3650可覆盖10年周期
内容的提问来源于stack exchange,提问作者Gitz
相关产品推荐
相关产品推荐

