Excel 从包含 0 的单元格上方的单元格中获取值 - 不带 vba-

Excel getting value from cells above a cell containing 0 -without vba-

提问人:Sjoerd Eeman 提问时间:9/11/2023 最后编辑:Sjoerd Eeman 更新时间:9/21/2023 访问量:66

问:

我有一列,里面有我拥有的一台机器的运行时间(这些都是手工填写的)。

机器发生故障后,机器将被修复,小时计数器将重置为0小时。

第一个单元格(在屏幕截图中)中的数字为 2538 是使用以下方法计算的:

=IF(COUNTIF(K2:K31,"0"),INDEX(K2:K31,MATCH(0,K2:K31,0)-1,1),"false") 

K2:K31是“小时”列。

此代码现在仅检查是否存在 0,然后在列中查找匹配项,选择它找到的第一个 0,然后选择上面的单元格并显示此单元格的值。

问题是我找不到跳过第一个 0 并显示第二个零以上的值的方法,在这种情况下,结果应该是 476。在我知道如何做到这一点之后,更改代码并检查第三个零上方的值可能很容易,在这种情况下应该是 105。

我不能使用 VBA,所以它必须是一个公式,我使用的是 Excel 2016 Pro 而不是 MS365。

numbers above cells with 0

running hours

运行时间
2122
2230
2345
2447
2538
0
100
233
421
444
448
460
475
476
0
10
13
18
25
54
70
100
101
105
0
4
8
156
250
300
页眉 值大于 0
第一个零以上的数字 2538
第二个零以上的数字 476
第三个零以上的数字 105
Excel 索引 excel-formula 匹配 跳过

评论

0赞 Mayukh Bhattacharya 9/13/2023
如果您遵循了我发布的解决方案,那么您应该已经这样做了,因为我已经发布了既可以使用的解决方案,也可以使用。查看所有方法,最后一个公式适用于以后MS365Excel 2010+Excel 2010+

答:

3赞 Mayukh Bhattacharya 9/11/2023 #1

请尝试使用以下公式:

enter image description here


• 细胞中使用的配方N2

=LET(
     a,SCAN(1,K2:K31,LAMBDA(x,y,x+(y=0))),
     b,UNIQUE(a),
     DROP(LOOKUP(b,a,K2:K31),-1))

或者,代替使用功能。DROP( )TAKE( )

enter image description here


=LET(
     a,SCAN(1,K2:K31,LAMBDA(x,y,x+(y=0))),
     b,UNIQUE(a),
     TAKE(LOOKUP(b,a,K2:K31),3))

不使用帮助程序函数的替代方法。LAMBDA( )

enter image description here


=INDEX(K2:K31,TOCOL(IFS(K2:K31=0,ROW(K2:K31)),3)-2)

另一种方式,如果您不使用 MS365,则使用INDEX() & AGGREGATE()

enter image description here


=INDEX($K$2:$K$31,AGGREGATE(15,6,(ROW($K$2:$K$31)-1)/($K$2:$K$31=0),ROW(A1))-1)

1赞 P.b 9/12/2023 #2

您还可以使用:=LET(range,K2:K31,FILTER(DROP(range,-1),DROP(range,1))

0赞 Sjoerd Eeman 9/21/2023 #3

这基于 Excel 2016,没有 MS365 或更高版本的 Excel。

我找到了解决问题的方法: 它需要更多的列,但这对我来说很好。如果需要,我可以隐藏这些列。这可能不是解决此问题的最佳方法,但它对我有用,在从 Stackoverflow 获得一些提示后找到我自己的解决方案是最好的感觉。这也是理解 Excel 中代码的好方法。

D 列是原始数据,只是数字 C 列正在检查 0,如果找到 0,则向其添加 1,如果是可以找到的第二个,则添加 2。Screenshot 1 of solution

E列,在本例中为E9,如果在C列中查找F9中的值,如果找到,则选择上面的数字。

C2:C4 计算 E 列的最大值、平均值和最小值。

Screenshot 2 of solution