【问题标题】:How to use Index to find all values greater than如何使用索引查找所有大于的值
【发布时间】:2017-01-29 19:36:09
【问题描述】:

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

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”部分给了我不同的答案,所以我认为我的问题就在那里,但我仍然不知道如何处理它。这应该是“SMALL”函数的“k”值。

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

【问题讨论】:

  • 只需将INDEX 中的$R$4:$R$13 更改为$R:$R。这是因为您的 Small 从 ROW($S$4:$S$13) 获取值,因此第一个条目将是 4,但 INDEX($R$4:$R$13,4) 将是 R7 而不是 R4。但是使用INDEX($R:$R,4) 会输出正确的R4 ;)
  • 这个解决方案奏效了!谢谢!

标签: excel indexing


【解决方案1】:

我更喜欢使用 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。

此外,此公式要求它至少从第二行开始,因为 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))

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

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

【讨论】:

  • 哇,很棒的帖子。我经常使用类似的功能,并将研究这个! (最后一个聚合很有趣)有什么理由让你更喜欢 Match 而不是 Small?是否有性能优势,还是只是个人喜好?另外,请注意,OP 可以将IfError([formula],"") 包裹在其周围以隐藏#NUM 错误。
  • @BruceWayne 我只是更喜欢它,因为我发现它更容易理解。它更像我想的那样流动。我没有放入 IFERROR 部分的原因是 OP 写了 I'll be taking care of the errors by using an IFERROR and making them blank, 所以我认为 OP 可以处理它。但对于未来的读者来说,这是一个很好的说明。
  • @ScottCraner 如果 OP 希望列出从第 1 行开始的退货怎么办?
  • @ScottCraner 您的结果从 V4 单元格开始。如果我想在单元格 V1 中开始列表怎么办?
  • @BruceWayne Re IFERROR,可能在较小的范围内,但如果数据集很大,这可能会非常低效:superuser.com/questions/812727/…
猜你喜欢
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 2021-05-16
  • 2014-11-16
相关资源
最近更新 更多