如何使用Index查找大于的所有值

时间:2016-09-21 13:48:19

标签: excel indexing

我在这个网站上和其他人一直在研究我的情况,这是我最接近我的问题/解决方案:

Find all values greater or equal than a certain value

但是,在我的情况下使用该解决方案并不能给我正确的结果。我列出了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的正确名称

编辑:更改最后一行" ROW"部分给了我不同的答案,所以我认为我的问题存在于某种程度,但我仍然不知道如何处理它。那应该是" k" " SMALL"的价值功能

非常感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:4)

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

UPDATE url_links
SET domainMatch = 1
WHERE SUBSTRING_INDEX(contact_email,'@', -1)
LIKE CONCAT('%', SUBSTRING_INDEX(site_url,'.', -2), '%');

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

此公式也要求它至少从第二行开始,因为countif需要引用上面的单元格以避免循环引用。

enter image description here

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

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

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

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

还有一个数组公式,所以用Ctrl-Shift-Enter确认。

enter image description here

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

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

这是作为常规公式输入的。它仍然是一个数组类型公式,因此仍然需要仅使用数据集作为参考,并避免公式的数组部分中的完整列引用。

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