Google Sheet Formula 来查找最长的递增值链

问题描述 投票:0回答:1

我有如下数据以及我希望得到的数据:

复制数据表:

价值观
21
76
23
24
25
26
62
63
47
30
31
32
45
预期产出
1
1
4
2
1
3
1

其中 1 表示下方单元格中没有递增值的值,4 表示从 23->26 的链(每行递增 1),依此类推。

本质上我想获得每个序列的长度。我不太确定该怎么做,我已经能够使用简单的公式获得

TRUE
FALSE
数组,例如:

=A2=A3-1

这给出了一个非常粗略的想法,其中连续 true 值的数量比最长长度少 1,但对于 false 值来说也不是最清晰的,因为您需要在链之后跳过 false 值并使其变得更多当我考虑在带有频率的数组公式中使用它时,情况很复杂。 我无法得到任何有用的东西。

任何帮助或想法表示赞赏,谢谢。

google-sheets google-sheets-formula
1个回答
0
投票

假设这些值在

A2:A14
范围内,这是一个可能的解决方案:

=ARRAYFORMULA(
   LET(a,A2:A14,
       TOCOL(
         LEN(
           SPLIT(
             REGEXREPLACE(
                JOIN(,N(a+1=OFFSET(a,1,0))),
                "1+0|0",
                "|$0|"),
             "|")))))

此公式根据下一个值是否为 1 + 前一个值来创建一个由 1 和 0 组成的字符串,然后使用

SPLIT
REGEXREPLACE
将字符串划分为适当的子字符串,并使用
LEN
进行检查这些子串的长度。

注意:如果范围内的值超过 50k,则当前的公式将不起作用,但如果需要,可以轻松解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.