Excel公式:对于列中的每个峰/底值实例,获取到下一个峰/底的范围/距离

Excel公式:对于列中的每个峰/底值实例,获取到下一个峰/底的范围/距离,excel,Excel,我希望在Excel中解决以下问题: ID Value Distance 1 1 3 2 0 0 3 -1 3 4 1 0 5 0 0 6 -1 0 7 0 0 基本距离栏是我想要的。它查看峰/底值(1和-1),然后向下滚动以找到下一个峰或底,并计算距离。例如,对于ID 1,由于它是峰值,我们寻找第二个峰值/底部,ID 3应该被跳过,因

我希望在Excel中解决以下问题:

ID     Value   Distance
1      1       3
2      0       0
3      -1      3
4      1       0
5      0       0
6      -1      0
7      0       0
基本距离栏是我想要的。它查看峰/底值(1和-1),然后向下滚动以找到下一个峰或底,并计算距离。例如,对于ID 1,由于它是峰值,我们寻找第二个峰值/底部,ID 3应该被跳过,因为它是第一个,所以我们查看ID 4,得到距离=4-1=3

尝试以下公式:

=IFERROR(AGGREGATE(15,6,A2:$A$18/ABS(B2:$B$18),3)/ABS(B2)-A2,0)
说明:

AGGREGATE
函数,其中前两个参数
15
6
和最后一个参数
3
返回数组中第三小的值
A2:$A$18/ABS(B2:$B$18)
忽略错误-在除法后的第一行中,数组如下所示
[1,#DIV/0!、3、4、#DIV/0!、6、#DIV/0!…]
并返回
4

接下来,将该值除以当前行的列
B
的绝对值(如果除以0,则得到一个错误,
IFERROR
函数返回0)

然后我们从获得的结果(第一行
1
)中减去当前行
A列的值,得到所需的距离-
3

要获得第三个值和后续值,请相应地增加
AGGREGATE
函数的最后一个参数


你能解释一下逻辑吗?如果我想修改公式以获得第三个下一个/第四个下一个/第五个下一个…,我该如何更改它?@domesome请参见编辑。我尝试了你的公式,奇怪的是它在谷歌工作表上不起作用,请参见此处@domesome此公式仅在excel中起作用。你没有要求谷歌提供表单。@有些GS应该可以使用:
=IFERROR(小(过滤器(A2:$A 18/ABS(B2:$B$18),(A2:$A 18/ABS(B2:$B$18))>0),3)/ABS(B2)-A2,0)