求Google Sheet公式:计算递增数值序列的长度
解决方案:计算连续递增+1序列的长度
假设你的数据存放在A2:A14(对应给出的13个数值),以下两种方法可实现需求:
方法1:SCAN + FREQUENCY 组合(高效直观)
直接在B2单元格输入以下数组公式(无需下拉,自动填充):
=ArrayFormula( IF(A2:A="",, XLOOKUP( SCAN(1, A2:A, LAMBDA(current_group, current_val, IF(ROW(current_val)=2, current_group, IF(current_val=OFFSET(current_val,-1,0)+1, current_group, current_group+1) ) )), SEQUENCE(MAX(SCAN(1, A2:A, LAMBDA(current_group, current_val, IF(ROW(current_val)=2, current_group, IF(current_val=OFFSET(current_val,-1,0)+1, current_group, current_group+1) ) )))), FREQUENCY( IF(A2:A<>"", ROW(A2:A)), IF(A2:A<>"", IF(A3:A<>A2:A+1, ROW(A3:A)),) ) ) ) )
公式拆解:
- SCAN生成组号:遍历A列数据,给每个连续递增序列分配唯一组号(比如21是组1,76是组2,23-26是组3)。
- FREQUENCY计算组长度:通过识别断点(当前值+1≠下一个值的位置),用
FREQUENCY统计每个组的行数,即序列长度。 - XLOOKUP匹配长度:将每行的组号对应到对应组的长度,输出最终结果。
方法2:MMULT 矩阵乘法(逻辑清晰)
若偏好更直白的逻辑,可使用矩阵乘法直接计算每个位置到序列末尾的连续次数:
=ArrayFormula( IF(A2:A="",, MMULT( N(ROW(A2:A)<=TRANSPOSE(ROW(A2:A))*(A2:A+SEQUENCE(ROWS(A2:A),1,0)=TRANSPOSE(A2:A))), SEQUENCE(ROWS(A2:A),1,1) ) ) )
逻辑说明:
- 生成判断矩阵:检查当前行
i的后续行j是否满足A[j] = A[i] + (j-i)(即连续+1)。 - 用
MMULT对每行符合条件的结果求和,得到当前位置所在序列的长度。
测试结果
针对你提供的数据集:21、76、23、24、25、26、62、63、47、30、31、32、45,两种方法都会输出:1、1、4、4、4、4、2、2、1、3、3、3、1,完全匹配需求。
内容的提问来源于stack exchange,提问作者Jackie Jones
相关产品推荐
相关产品推荐

