我在这个网站上和其他人一直在研究我的情况,这是我最接近我的问题/解决方案:
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"的价值功能
非常感谢任何帮助。谢谢!
答案 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需要引用上面的单元格以避免循环引用。
如果你真的想使用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确认。
另一种方法是使用没有CSE输入的AGGREGATE作为正常公式:
=INDEX($R:$R$,SMALL(IF($S$4:$S$13>0,ROW($S$4:$S$13)),ROW(1:1)))
这是作为常规公式输入的。它仍然是一个数组类型公式,因此仍然需要仅使用数据集作为参考,并避免公式的数组部分中的完整列引用。
当第一行中需要第一个返回结果时,最后两个特别有用,因为它们不需要COUNTIF()来维持唯一返回。