【问题标题】:Finding the Top 2 scores and returning the corresponding adjacent values from a row array查找前 2 个分数并从行数组中返回相应的相邻值
【发布时间】:2019-05-08 09:54:09
【问题描述】:

我在相邻单元格中有一行带有分数和图层信息的值,以文本格式显示。我想找到最高分并返回带有文本信息的相邻单元格,同样地找到带有相邻单元格信息的第二高分,注意前两个可能具有相同的分数,但它们应该具有不同的文本值。

我已经尝试过索引和匹配公式。

=INDEX(Table2[@],MATCH(MAX(Table2[@]),Table2[@],0)+1)

示例数据布局

Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer   Score   Layer
7       River   6       Lake    7       Coastal 8       Canal   6       Lake    7       River   10      Reservoir   8   Canal   10      Estuary

【问题讨论】:

  • 感谢一百万转发 Ed,非常感谢您的帮助!

标签: excel excel-formula


【解决方案1】:

回答已更新以反映数据布局

不使用数组公式而是使用执行数组运算的公式,您可以使用聚合。它与 JvdV 答案的过程基本相同,但使用不同的公式。

单元格引用基于以下屏幕截图中的信息,根据您的需要进行调整。

要获得最高分数,AGGREGATE 可用于使用公式 14 或 15 从排序列表中提取特定值,这些公式会相应地按降序或升序对信息进行排序。与大或小功能相同。在这种情况下,函数如下所示:

=AGGREGATE(14,6,$B$5:$S$5,ROW(A1))

将上面的公式放入单元格C10并根据需要复制下来。

一旦您有了想要从列表中提取的值,您可以再次使用 AGGREGATE 来获取它们对应的列号,然后将这些列号转储到 INDEX 公式中以提取适当的文本值。请记住,您需要将 +1 添加到列号,因为您想要的文本位于右侧的列中。最后使用 COUNTIF 来处理重复项。最大的问题是,如果您有超过 2 路领带作为第一个,您希望显示列表中的前两个还是显示列表中的最后两个?不同之处在于 AGGREGATE 函数使用的是 14 还是 15。在此示例中,将使用列表中的前两个。如果要最后两个更改 AGGREGATE 中的公式编号。

=INDEX($5:$5,AGGREGATE(15,6,COLUMN($B$5:$S$5)/($B$5:$S$5=C10)+1,COUNTIF($C$10:C10,C10)))

将上面的公式放入单元格 D10 并根据需要向下复制。

如果您查看 JvdV 使用的公式和这个答案,它们基本上是相同的。最大的不同是 JvdV 公式是 ARRAY 公式,需要 CTRL+SHIFT+ENTER 来确认公式,只需 ENTER此公式需要 kbd>。

在任何一种情况下,在数组操作中,都应避免完整的列/行引用,因为它们会导致过多的计算。请注意,对于此答案,在 AGGREGATE 函数之外使用了 $5:$5 的完整行引用,但在 AGGREGATE ($B$5:$S$5) 内部使用了定义的范围

【讨论】:

  • 永远不要使用括号! :)
  • 感谢您的帮助!我对 Stack Overflow 不太熟悉,可以添加文件或屏幕截图吗?
  • @user1856146 是的,你可以。您的操作方式可能会根据您的声誉得分而改变。查看问题编辑窗口顶部的图标。一个将用于添加图片。如果您的代表太低,那么只需添加一个链接。通常有人会出现并将您的链接转换为嵌入式图片。图片不能添加到 cmets。 TEXT 表格优于屏幕截图。 100 个人复制和粘贴数据比 100 个人重新键入屏幕截图要容易得多。
  • @user1856146 要接受您认为最能回答您的问题的答案,请单击答案旁边的复选标记以接受它。这与使用向上和向下箭头不同,尽管两者都可以使用。
  • 评分图层评分图层评分图层 7 河流 6 湖泊 7 沿海 8 运河 6 湖泊 7 河流 10 水库 8 运河 10 河口
【解决方案2】:

我相信这可能比您最初预期的要复杂一些。这是我的步骤:

样本数据:

E1中的公式:

=LARGE(TestTable[ColumnA],ROW())

D1中的公式:

{=INDEX(TestTable[ColumnB],SMALL(IF(TestTable[ColumnA]=E1,ROW(TestTable[ColumnA])-ROW(A$1)),COUNTIF(E$1:E1,E1)))}

向下拖动两个公式。注意最后一个是数组,需要通过CtrlShiftEnter

输入

我很想知道自己是否还有其他更直接的方法!

【讨论】:

  • 如果表不是从 A1 开始,是否需要更改 ROW(A$1)?即如果桌子的左上角是G22?
  • @ForwardEd,在这种情况下,您确实会使用ROW(G$22)ROW(A$22)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-13
  • 2020-09-21
  • 2018-06-27
  • 1970-01-01
相关资源
最近更新 更多