我有如下数据以及我希望得到的数据:
复制数据表:
价值观 |
---|
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 值并使其变得更多当我考虑在带有频率的数组公式中使用它时,情况很复杂。 我无法得到任何有用的东西。
任何帮助或想法表示赞赏,谢谢。
假设这些值在
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,则当前的公式将不起作用,但如果需要,可以轻松解决此问题。