求助:Excel超200行表格中唯一时长总和的计算方法
计算Excel中不重叠时长的总时长(大行数适用)
核心需求说明
合并表格中所有重叠/连续的时间段,计算这些唯一不重叠时间段的总时长(比如示例中12:00-14:00、14:00-16:00、17:00-19:00,总时长6小时)。
方法一:Power Query(推荐,适合200+行大数据量)
假设你的数据在A列(开始时间)、B列(结束时间),表头为「开始时间」「结束时间」:
- 选中数据区域,点击「数据」选项卡 → 「从表格/区域」,勾选「我的表格有标题」,进入Power Query编辑器。
- 按「开始时间」升序排序:点击「开始时间」列的排序按钮,选择升序。
- 打开「高级编辑器」,替换原有代码为以下内容(注意将
表1改为你实际的表格名称):let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 更改类型 = Table.TransformColumnTypes(源,{{"开始时间", type time}, {"结束时间", type time}}), 排序 = Table.Sort(更改类型,{{"开始时间", Order.Ascending}}), 合并时间段 = Table.FromRecords(List.Accumulate(Table.ToRecords(排序), {}, (state, current) => if List.IsEmpty(state) then {current} else let last = List.Last(state) in if current[开始时间] <= last[结束时间] then List.RemoveLastN(state, 1) & {[开始时间=last[开始时间], 结束时间=List.Max({last[结束时间], current[结束时间]})]} else state & {current} )), 计算单段时长 = Table.AddColumn(合并时间段, "时长(小时)", each Duration.TotalHours([结束时间] - [开始时间])), 总时长 = List.Sum(计算单段时长[时长(小时)]) in 总时长 - 点击「关闭并上载」,Excel会自动生成一个新工作表,显示最终的总时长。
方法二:动态数组公式(适合Excel 365/2021)
假设开始时间在A2:A201,结束时间在B2:B201,直接在空白单元格输入以下公式(按回车即可,无需按Ctrl+Shift+Enter):
=SUM(LET( 排序开始, SORT(A2:A201), 排序结束, SORTBY(B2:B201, A2:A201), 合并结束时间, SCAN(排序结束[1], DROP(排序开始,1), LAMBDA(当前结束, 下一个开始, IF(下一个开始<=当前结束, 当前结束, XLOOKUP(下一个开始, 排序开始, 排序结束)))), 唯一结束, UNIQUE(合并结束时间), 对应开始, XLOOKUP(唯一结束, 合并结束时间, 排序开始), SUM(唯一结束 - 对应开始)*24 ))
公式说明:
- 先按开始时间排序所有时间段
- 用
SCAN合并重叠时间段的结束时间 - 提取唯一的合并后时间段,计算每个时间段的时长(乘以24将天数转换为小时),最后求和
注意事项
- 确保时间列格式为「时间」类型,避免文本格式导致计算错误
- 若存在跨天时间段(如23:00-01:00),需将时间改为「日期+时间」格式(如2024/05/20 23:00)再进行计算
内容的提问来源于stack exchange,提问作者Harry
相关产品推荐
相关产品推荐

