如何用Excel公式将单条时段记录拆分为小时级多条记录?
无需VBA的Excel小时级拆分方案
原数据(示例)
| 开始日期 | 结束日期 | 开始时间 | 结束时间 | Volume | Price |
|---|---|---|---|---|---|
| 9/12/22 | 9/12/22 | 10:00 | 12:00 | 50 | 300 |
期望输出
| 开始日期 | 结束日期 | Time | Volume | Price |
|---|---|---|---|---|
| 9/12/22 | 9/12/22 | 10 | 50 | 300 |
| 9/12/22 | 9/12/22 | 11 | 50 | 300 |
单条记录拆分公式(Excel 365/2021 动态数组支持)
假设原数据在A2:F2单元格(A1为表头),在空白区域(如H2)输入以下公式,Excel会自动溢出生成所有小时行:
=LET( 总小时数, HOUR(D2)-HOUR(C2), 行序列, SEQUENCE(总小时数), HSTACK( REPT(A2,总小时数), REPT(B2,总小时数), HOUR(C2)+行序列-1, REPT(E2,总小时数), REPT(F2,总小时数) ) )
公式说明:
HOUR(D2)-HOUR(C2):计算开始到结束的小时跨度,确定需要生成的行数SEQUENCE(总小时数):生成从1到小时数的序列,用于计算每个时段的小时数REPT(单元格,总小时数):重复日期、成交量、价格数据,匹配小时行数量HSTACK:将各列数据横向合并成完整的小时级记录
多条记录批量拆分公式
如果有多条记录(如A2:F10),用以下公式可一次性处理所有数据并自动添加表头:
=LET( 数据区域, A2:F10, 处理单条, LAMBDA(x, LET( 开始日期, INDEX(x,1), 结束日期, INDEX(x,2), 开始时间, INDEX(x,3), 结束时间, INDEX(x,4), 成交量, INDEX(x,5), 价格, INDEX(x,6), 小时数, HOUR(结束时间)-HOUR(开始时间), IF(小时数>0, HSTACK( REPT(开始日期,小时数), REPT(结束日期,小时数), HOUR(开始时间)+SEQUENCE(小时数)-1, REPT(成交量,小时数), REPT(价格,小时数) ), "" ) ) ), 结果, BYROW(数据区域,处理单条), VSTACK({"开始日期","结束日期","Time","Volume","Price"},TOCOL(结果,3)) )
公式说明:
BYROW(数据区域,处理单条):遍历每条原始记录,调用自定义函数处理TOCOL(结果,3):将分散的结果合并成连续的列,过滤空值VSTACK:将表头和处理后的结果纵向合并,形成完整的输出表
内容的提问来源于stack exchange,提问作者mattf
相关产品推荐
相关产品推荐

