不使用 OFFSET 计算运行计数

Sta*_*tto 6 excel lambda excel-formula

我正在尝试寻找公式的替代方法来计算某个范围内多个值的运行计数。

它返回正确的结果,但问题是它使用了 volatile function OFFSET(),我想避免这种情况。

公式如下:

=SCAN(0,A2:A13,
LAMBDA(a,b,
IF(OFFSET(b,-1,0)=b,
a+1,1)
)
)
Run Code Online (Sandbox Code Playgroud)

我尝试过使用INDEX()and ROW(),但我无法复制它的OFFSET()作用。

我怎样才能改变公式?

在此输入图像描述

VBa*_*008 6

运行计数

  • 诀窍是将该列与向下移动一行的列的版本进行比较。我使用VSTACKwith""添加新的(空)第一行,并DROP使用 with-1删除最后一行。
=LET(Data,A2:A13,
SCAN(0,Data=DROP(VSTACK("",Data),-1),
    LAMBDA(a,b,IF(b,a+1,1))))
Run Code Online (Sandbox Code Playgroud)


Jvd*_*vdV 5

简而言之,您需要一种方法来迭代真值/假值数组,以指示前一个值 == 当前值。如果您正在使用单元格引用,这很简单:

=SCAN(0,A1:A12=A2:A13,LAMBDA(a,b,IF(b,a+1,1)))
Run Code Online (Sandbox Code Playgroud)

您最终会得到连续值的运行计数,这些值将相应地重置。

为了更好的衡量;INDIRECT()使用时可以避免使用SCAN(). 如果需要,请按照示例引用每个元素各自的行/列。