Excel中拆分时长超30分钟的记录并生成新行的方法
Excel时长拆分解决方案
针对你需要将Duration>30的行按30分钟拆分、同时累加起止时间的需求,这里提供两种高效实现方法:
方法一:Power Query批量处理(推荐)
适合大量数据的自动化拆分,步骤如下:
- 选中你的数据区域,点击「数据」选项卡 → 「从表格/范围」,勾选「我的表格有标题」后进入Power Query编辑器。
- 添加自定义列生成拆分后的行列表:
点击「添加列」→「自定义列」,输入以下M语言公式:
这个公式会先生成所有30分钟的行记录,再追加剩余时长的行(如果有余数)。List.Repeat({[UserId, Status, 30, Start_Date, End_Date]}, Number.IntegerDivide([Duration], 30)) & if Number.Mod([Duration], 30) > 0 then {[UserId, Status, Number.Mod([Duration], 30), null, null]} else {} - 展开列表到新行:点击自定义列右侧的「展开到新行」图标,将列表拆分为独立行。
- 添加索引列:点击「添加列」→「索引列」→「从0开始」,用于计算时间累加值。
- 计算新的Start_Date:
再次添加自定义列,输入公式:
该公式会基于原开始时间,按索引累加30分钟。[Start_Date] + #duration(0, 0, 30*[Index], 0) - 计算新的End_Date:
添加自定义列,输入公式:
(注意将[Start_Date_New] + #duration(0, 0, [Duration], 0)Start_Date_New替换为你上一步生成的列名) - 清理列:删除原始的Start_Date、End_Date、索引列,调整列顺序与原表一致。
- 导出结果:点击「关闭并上载」,处理后的数据会自动导入新工作表。
方法二:公式法(适合少量数据)
假设原数据表头在A1:E1,第一行数据在A2:E2,在空白区域(如G1:K1)复制原表头,然后在G2开始输入以下公式:
- UserId列(G2):
=INDEX($A:$A,INT((ROW(A1)-1)/ROUNDUP($D2/30,0))+2) - Status列(H2):
=INDEX($B:$B,INT((ROW(A1)-1)/ROUNDUP($D2/30,0))+2) - Duration列(I2):
=IF(MOD(ROW(A1)-1,ROUNDUP($D2/30,0))<ROUNDUP($D2/30,0)-1,30,IF(MOD($D2,30)=0,30,MOD($D2,30))) - Start_Date列(J2):
=INDEX($C:$C,INT((ROW(A1)-1)/ROUNDUP($D2/30,0))+2)+TIME(0,30*(MOD(ROW(A1)-1,ROUNDUP($D2/30,0))),0) - End_Date列(K2):
=J2+TIME(0,I2,0)
下拉填充公式直到出现空值,最后复制结果并粘贴为值即可完成整理。
示例数据处理效果
原数据行:
| UserId | Status | Duration | Start_Date | End_Date |
|---|---|---|---|---|
| Eman.Aldosary | working on email, no acd | 552 | 06-09-22 7:30 | 06-09-22 16:30 |
拆分后会生成19行:前18行Duration为30,每行Start_Date依次累加30分钟;最后一行Duration为12,Start_Date为原时间加18*30分钟(即06-09-22 16:30),End_Date为16:30加12分钟(16:42)。
内容的提问来源于stack exchange,提问作者Mahmoud Badr
相关产品推荐
相关产品推荐

