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

Excel 如何使用索引查找大于的所有值,excel,indexing,Excel,Indexing,我已经在这个网站和其他网站上对我的情况进行了很多研究,这是最接近我的问题/解决方案: 然而,在我的情况下使用该解决方案并不能给出正确的结果。我有一份83个名字的名单,每个名字都会受到处罚。在单独的选项卡上,我想显示所有具有任何惩罚(>0)的名称的输出。 我只有四种可能的惩罚,所以如果我需要在公式中引用它们(匹配或查找),也可以。缩短和简化数据,以下是我的示例: +----------+---------+ | Name | Penalty | +----------+---------

我已经在这个网站和其他网站上对我的情况进行了很多研究,这是最接近我的问题/解决方案:

然而,在我的情况下使用该解决方案并不能给出正确的结果。我有一份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并将其设置为空来处理错误,但它仍然无法找到那些罚分>0的人的正确姓名

编辑:更改最后的“行”部分会给我不同的答案,所以我认为我的问题就在那里,但我仍然不知道如何处理它。这应该是“小”函数的“k”值

非常感谢您的帮助。谢谢

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

这是一个数组公式,因此请使用Ctrl-Shift-Enter

此外,该公式要求它至少从第二行开始,因为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()而不是索引,因此可以在索引部分使用完整列,并使用SMALL as is,因为它将返回实际的行号:

=INDEX($R:$R$,SMALL(IF($S$4:$S$13>0,ROW($S$4:$S$13)),ROW(1:1)))
还有一个数组公式,因此请使用Ctrl-Shift-Enter确认

另一种方法是使用未输入CSE的骨料作为标准公式:

=INDEX($R:$R,AGGREGATE(15,6,ROW($R$4:$R$13)/($S$4:$S$13>0),ROW(1:1))
这将作为常规公式输入。它仍然是一个数组类型的公式,因此仍然需要仅使用数据集作为引用,并避免在公式的数组部分使用完整的列引用


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

只需将
索引中的
$R$4:$R$13
更改为
$R:$R
。这是因为Small从
行($S$4:$S$13)
获取值,因此第一个条目将是4,但
索引($R$4:$R$13,4)
将是R7而不是R4。但是使用
索引($R:$R,4)
将输出正确的R4;)这个解决方案奏效了!非常感谢。哇,好帖子。我经常使用类似的函数,并将对此进行研究!(最后一个聚合是有趣的)有什么原因让你更喜欢做匹配而不是小的吗?是否有绩效优势,或者只是个人偏好?另外,需要注意的是,OP可以将
IfError([formula],“”)
包裹起来,以隐藏
#NUM
错误。@Brucewayn我更喜欢它,因为我觉得它更容易理解。它更像我想的那样流动。我没有把IFERROR部分放进去的原因是OP写了,
我将通过使用IFERROR并将其置为空来处理错误,
,所以我认为OP可以处理它。但对于未来的读者来说,这是一个很好的提示。@ScottCraner如果OP希望列出从第1行开始的收益,该怎么办?@ScottCraner您的结果从第4单元格开始。如果我想在单元格V1中开始列表,该怎么办?@BruceWayne Re-IFERROR,可能范围很小,但如果数据集很大,这可能会非常低效:
=INDEX($R:$R,AGGREGATE(15,6,ROW($R$4:$R$13)/($S$4:$S$13>0),ROW(1:1))