Excel 数组公式用于计算连续相同的值

Excel 数组公式用于计算连续相同的值

我有一个整数序列,我想计算序列中每个点的当前相同值序列的长度。例如,如果序列是 (0,1,1,1,0,0),我希望输出 (1,1,2,3,1,2)。

使用非数组公式可以轻松实现这一点:

B2 =100                         # Length of the sequence
D2 =SEQUENCE(B2)              
E2 =RANDARRAY(B2,,0,1,TRUE)     # My sequence
F2 =IF(OR(D2=1,E2<>E1),1,F1+1)  # Formula copied down until the end of the sequence (F101)

现在,我想在列中有一个数组公式F,因为我事先不知道我的序列有多长。我最好的尝试是:

G2 =LET(s,E2#,SCAN(0,D2#,LAMBDA(a,x,IF(OR(x=1,INDEX(s,x)<>INDEX(s,x-1)),1,a+1))))

截屏

公式可以工作,但是速度很慢。上面的非数组公式F2即使等于 100,000 也几乎立即起作用B2,而数组公式在B2等于 10,000 时就已经很吃力了。

有什么想法可以使数组公式像非数组公式一样快吗?

答案1

对于我来说,使用 XMATCH 和 BYROW 可以处理 100,000 行:

=BYROW(E2#,LAMBDA(a,LET(b,ROW(a),s,E2#,b-1-IFERROR(XMATCH(ABS(a-1),INDEX(s,1):INDEX(s,b-1),0,-1),0))))

它逐行查找。它从查找相反数的点开始,自下而上地进行匹配:ABS(a-1) 然后从当前行中减去该数字,返回计数。

这不需要 D 列。

我测试了 100,000,它响应相当快,1,000,000 需要几秒钟。

在此处输入图片描述

相关内容