在Google Sheets中识别行内活动B对应时间差并求和
Google Sheets 活动B总耗时计算方案
核心公式(灵活适配多组活动列)
直接在B2单元格输入以下公式,即可自动计算每行中活动B的总耗时,无需手动下拉或添加辅助列:
=BYROW(A2:A, LAMBDA(r, IF(r="",, SUM( LET( ac_cols, FILTER(COLUMN(1:1), REGEXMATCH(1:1, "Ac.")), start_cols, ac_cols-2, end_cols, ac_cols+1, ARRAYFORMULA(IF(INDIRECT(ADDRESS(ROW(r), ac_cols, 4))="B", INDIRECT(ADDRESS(ROW(r), end_cols, 4))-INDIRECT(ADDRESS(ROW(r), start_cols, 4)), 0)) ) ))))
公式说明
BYROW(A2:A, LAMBDA(r, ...)):逐行处理A列的有效数据行,r代表当前处理的行IF(r="",, ...):跳过空行,只对有数据的行计算耗时LET(...):定义变量简化逻辑:ac_cols:自动识别所有表头包含"Ac."的列的列号start_cols:对应活动的开始时间列(Ac.列往前数2列)end_cols:对应活动的结束时间列(Ac.列往后数1列)
ARRAYFORMULA(...):批量判断当前行所有Ac.列是否为"B",是则计算对应结束时间与开始时间的差值,否则返回0SUM(...):将当前行所有活动B的耗时差值求和,得到该行总耗时
可选:显示为小时数
如果需要将耗时以小时数(而非时间格式)显示,可在求和部分乘以24:
=BYROW(A2:A, LAMBDA(r, IF(r="",, SUM( LET( ac_cols, FILTER(COLUMN(1:1), REGEXMATCH(1:1, "Ac.")), start_cols, ac_cols-2, end_cols, ac_cols+1, ARRAYFORMULA(IF(INDIRECT(ADDRESS(ROW(r), ac_cols, 4))="B", INDIRECT(ADDRESS(ROW(r), end_cols, 4))-INDIRECT(ADDRESS(ROW(r), start_cols, 4)), 0)) )*24 )))
内容的提问来源于stack exchange,提问作者Stuart L
相关产品推荐
相关产品推荐

