如何使用索引查找大于。的所有值

我一直在研究我的情况相当多,无论是在这个网站和其他人,这是最接近我的问题/解决scheme:

查找大于或等于某个值的所有值

但是,在我的情况下使用这种解决scheme并不能给我正确的结果。 我有83个名字的名单,每个名字都有处罚。 在一个单独的选项卡上,我想要显示具有任何罚分(> 0)的所有名称的输出。
我只有四个可能的处罚,所以如果我需要在公式(匹配或查找)中引用它们,那也可以。 缩短数据,这里是我的例子:

+----------+---------+ | Name | Penalty | +----------+---------+ | Name 1 | 0 | | Name 2 | 0 | | Name 3 | 5 | | Name 4 | 0 | | Name 5 | 0 | | Name 6 | 10 | | Name 7 | 0 | | Name 8 | 0 | | Name 9 | 0 | | Name 10 | 20 | +----------+---------+ 

使用这个公式,然后使用CSE并向下拖动:

 =INDEX($R$4:$R$13,SMALL(IF($S$4:$S$13>0,ROW($S$4:$S$13)),ROW(1:1))) 

它给了我这些结果:

 +---------+ | Name 6 | | Name 9 | | #REF! | | #NUM! | | #NUM! | | #NUM! | | #NUM! | | #NUM! | | #NUM! | | #NUM! | +---------+ 

我将通过使用一个IFERROR来处理这些错误,并使它们变成空白,但是仍然没有find罚分> 0的错误的正确名称

编辑:改变最后的“行”部分给了我不同的答案,所以我认为我的问题在于某处,但我仍然不知道该怎么办。 这应该是“小”function的“k”值。

任何帮助深表感谢。 谢谢!

我更喜欢使用MATCH()而不是SMALL():

 =INDEX($R$4:$R$13,MATCH(1,($S$4:$S$13>0)*(COUNTIF($U$3:U3,$R$4:$R$13)=0),0)) 

这是一个数组公式,所以使用Ctrl-Shift-Enter。

此外,这个公式要求它至less在第二行开始,因为countif需要引用上面的单元格以避免循环引用。

在这里输入图像说明


如果你真的想使用SMALL(),那么你需要对起始行进行调整:

 =INDEX($R$4:$R$13,SMALL(IF($S$4:$S$13>0,ROW($S$4:$S$13)-ROW($S$4)+1),ROW(1:1))) 

或者@dirk指出数组部分是SMALL()而不是INDEX,因此可以使用INDEX部分中的完整列并使用SMALL,因为它将返回实际的行号:

 =INDEX($R:$R$,SMALL(IF($S$4:$S$13>0,ROW($S$4:$S$13)),ROW(1:1))) 

另外一个数组公式用Ctrl-Shift-Enter确认。

在这里输入图像描述

另一种方法是使用没有CSE的AGGREGATE作为正常的公式:

 =INDEX($R:$R,AGGREGATE(15,6,ROW($R$4:$R$13)/($S$4:$S$13>0),ROW(1:1)) 

这是作为一个常规公式input的。 它仍然是一个数组types的公式,所以仍然只需要使用数据集作为参考,并避免在公式的数组部分中引用完整的列引用。

当第一行需要第一个返回结果时,最后两个特别有用,因为它们不需要COUNTIF()来保持Unique返回值。