如何在Google Sheets/Excel中用ARRAYFORMULA计算到指定值的剩余行数?
用ARRAYFORMULA计算当前行到下一个特定值的剩余行数
针对你需要在Google Sheets中用单个ARRAYFORMULA实现的需求,这里提供两种可行方案:
方案1:使用XMATCH(推荐,Google Sheets新版支持)
在B1单元格输入以下公式:
=ARRAYFORMULA({"Result"; IF(A2:A="",, IF(A2:A=1, 0, XMATCH(1, A2:A, 0, ROW(A2:A)) - ROW(A2:A)))})
公式逻辑:
{"Result"; ...}:为B列设置表头IF(A2:A="",, ...):跳过A列的空行IF(A2:A=1, 0, ...):当A列当前行是1时,B列直接返回0XMATCH(1, A2:A, 0, ROW(A2:A)):从当前行开始向下查找第一个值为1的行号,确保每一行都从自身位置向后搜索- 用找到的目标行号减去当前行号,得到到下一个1的剩余行数
方案2:使用VLOOKUP(兼容旧版Google Sheets)
如果你的Google Sheets版本不支持XMATCH,可使用此公式:
=ARRAYFORMULA({"Result"; IF(A2:A="",, IF(A2:A=1, 0, VLOOKUP(ROW(A2:A), FILTER({ROW(A2:A), ROW(A2:A)}, A2:A=1), 2, TRUE) - ROW(A2:A)))})
公式逻辑:
FILTER({ROW(A2:A), ROW(A2:A)}, A2:A=1):生成所有A列为1的行号列表VLOOKUP(ROW(A2:A), ..., 2, TRUE):查找大于等于当前行号的最小目标行号(即下一个1所在行)- 同样通过行号差值得到剩余行数
为什么你的原公式不符合预期?
你之前使用的COUNTIFS是统计当前行及之前的0的数量,方向是向前计数,而需求是向后计算到下一个1的行数,因此逻辑方向相反,无法得到正确结果。上述两种方案都是通过向后查找下一个1的位置来实现需求,完全匹配你的示例结果。
内容的提问来源于stack exchange,提问作者Thomas
相关产品推荐
相关产品推荐

