Google Sheets:查找起始行之后首个含0单元格对应时间
Google Sheets:计算起始时间后首个0值对应的结束时间
需求说明
你需要统计各区域人员在场的起止时间:
- 起始时间:已实现,找到区域列首个非0单元格对应的A列时间
- 结束时间:需找到起始时间所在行之后的首个0单元格对应的A列时间
数据示例:
| Time | Section1 | Section2 |
|---|---|---|
| 9:00am | 1 | 0 |
| 9:30am | 1 | 0 |
| 10:00am | 1 | 1 |
| 10:30am | 0 | 1 |
解决方案
核心思路
先定位起始时间的行号,再从该行之后的区域中查找首个0值,最后映射到A列的时间。
1. 提取起始行的相对行号(可复用)
以Section1(B列)为例,用以下公式获取首个非0单元格在B2:B中的相对行号:=MATCH(TRUE,INDEX($B$2:$B>0,0),0)
示例中该公式返回1,对应工作表的第2行。
2. 结束时间公式(整合版)
直接使用以下公式得到Section1的结束时间:
=IFNA(INDEX($A$2:$A, MATCH(TRUE,INDEX($B$2:$B>0,0),0) + MATCH(TRUE, INDEX(OFFSET($B$2:$B, MATCH(TRUE,INDEX($B$2:$B>0,0),0), 0)=0, 0))))
逻辑拆解:
OFFSET($B$2:$B, MATCH(...), 0):从起始行的下一行开始,截取B列剩余数据- 第二个
MATCH:在截取的范围内找到首个0的相对行号 - 两个行号相加,得到目标单元格在A2:A中的位置,用
INDEX返回对应时间
3. 更简洁的XLOOKUP写法
如果你的Google Sheets支持XLOOKUP,用这个更直观:
=IFNA(XLOOKUP(0, OFFSET($B$2:$B, MATCH(TRUE,INDEX($B$2:$B>0,0),0), 0), OFFSET($A$2:$A, MATCH(TRUE,INDEX($B$2:$B>0,0),0), 0),,0,1))
逻辑拆解:
- 两个
OFFSET分别生成起始行之后的B列数据和对应A列时间区域 XLOOKUP(0, 查找区, 返回区,,0,1):精确匹配0,从区域开头搜索,返回对应时间
适配其他区域
要计算Section2(C列)的结束时间,只需把公式中的$B$2:$B替换为$C$2:$C,例如:
=IFNA(XLOOKUP(0, OFFSET($C$2:$C, MATCH(TRUE,INDEX($C$2:$C>0,0),0), 0), OFFSET($A$2:$A, MATCH(TRUE,INDEX($C$2:$C>0,0),0), 0),,0,1))
注意点
- 若起始行之后无0值,公式返回空白(
IFNA处理了匹配失败的错误) - 确保数据区域连续,无空行干扰匹配结果
内容的提问来源于stack exchange,提问作者ZoomZoom
相关产品推荐
相关产品推荐

