Google Sheets批量展开日期区间为单日行并关联员工列的公式
Google Sheets 批量生成员工请假单日明细方案
基础场景
- 原始请假数据存放在名为
Input的工作表中,数据结构为:A列=员工姓名、B列=请假起始日期、C列=请假结束日期,第1行为表头,有效数据从第2行开始 - 核心需求:
- 将每一段请假的日期区间拆分为独立的单日数据行,每行日期与对应员工姓名绑定
- 支持批量处理所有员工的多条请假记录,一次性输出全量请假单日明细
- 原有单条区间填充公式存在明显缺陷:
仅能生成单条请假记录的日期序列,无法同步关联员工姓名,也不支持多行数据批量处理。=ArrayFormula((TO_DATE(row(indirect("A"&Input!B2):indirect("A"&Input!C2)))))
实现公式
操作提示:新建一个用于存放输出结果的工作表,将以下公式直接粘贴到新表的A1单元格即可,无需手动下拉填充,
Input表新增请假记录后结果会自动更新。
=ARRAYFORMULA( LET( valid_data, FILTER(Input!A2:C, Input!B2:B<>"", Input!C2:C<>""), emp_names, INDEX(valid_data,,1), leave_start, INDEX(valid_data,,2), leave_end, INDEX(valid_data,,3), leave_days, leave_end - leave_start + 1, total_output_rows, SUM(leave_days), repeated_names, TRIM(TRANSPOSE(SPLIT(REPT(CONCATENATE(emp_names&"|"), leave_days), "|", 1, 1))), start_match, VLOOKUP(SEQUENCE(total_output_rows),{SUMIF(ROW(leave_days),"<="&ROW(leave_days),leave_days)-leave_days+1,leave_start},2,1), row_offset, SEQUENCE(total_output_rows,1,0)-VLOOKUP(SEQUENCE(total_output_rows),{SUMIF(ROW(leave_days),"<="&ROW(leave_days),leave_days)-leave_days+1,SEQUENCE(ROWS(leave_days),1,0)},2,1), single_dates, TO_DATE(start_match + row_offset), QUERY({repeated_names, single_dates}, "select * where Col1 is not null label Col1'员工姓名',Col2'请假日期'") ) )
输出说明
公式运行后会自动生成带表头的两列结果:
- 第一列:员工姓名,按对应请假记录的天数自动重复匹配
- 第二列:请假单日日期,覆盖每段请假区间内的所有自然日
内容的提问来源于stack exchange,提问作者GoogleSheetsStudent
相关产品推荐
相关产品推荐

