首页 > 解决方案 > Excel - 从基于非唯一条件的范围内返回多个唯一查询,即相似排名

问题描述

我很难找到正确的公式来准确返回所有场景中排名前三的结果。当排名不相等时,1、2、3、4、5 总是好的。但是,当前 2 或 3 个结果并列第一时,比如 1、1、1、4、5,我找不到正确的公式来准确返回所有前 3。

地点排名 地点排名

E3:E6 处的数组“Helper”公式范围与 F3:F6 处的“前 3”范围完美配合,因此排名排序逻辑工作正常。

辅助数组 辅助数组

前 3 个参考范围 Top 3 参考范围

在 G3:G6 创建“前 3 名列表”范围的最后一步是出错的地方。我尝试了许多变体,包括我不熟悉的数组公式,但没有一个有效。迄今为止最好的是 MATCH & SMALL 组合,但不适合重复。(见下文)

前 3 名 - 列表的公式没有抓住所有 3 #1 位置 “前 3 名 - 列表”公式未涵盖所有 3 个 #1 位置

如果有人知道即使有重复排名也会返回准确的“前 3 名列表”的公式?谢谢!

PS:这是我的第一个请求帖子。Stackoverflow 帮助了我很多次

没有重复 - 一切都很好

一个重复的分数 - 第 1 和第 2 名实际上是两次 #1

两个重复的分数 - 第 1、第 2 和第 3 名实际上是 #1 3x

标签: excelexcel-formuladuplicatesranking-functions

解决方案


此答案将按照它们在您的列表中出现的顺序返回前三个结果。甚至可以消除辅助列,但我没有测试那么远。我重新排列了您的列表,以便它不仅仅是抓住前三行。否则,它就像对列表进行排序并链接到前三行一样简单。

帮手栏目抢分前三

=AGGREGATE(14,6,$C$4:$C$8,ROW(A1))

它假设您的数据位于 B4:C8 中。将公式向下复制,直到将其分成三行。与 14 聚合会将您的列表从大到小排序。Row(A1) 将返回排序列表中的第一个值。当它被复制下来时,它将增加到行(A2),因此它将返回排序列表中的第二个值,依此类推。

将排序后的分数与名称匹配

这假设您的前三个分数列表在 E4:E6 中

=INDEX(B:B,AGGREGATE(15,6,ROW($C$4:$C$8)/($C$4:$C$8=E4),COUNTIF($E$4:E4,E4)))

它查找与排序的前三个列表中的数字匹配的所有行号。当有重复时,由于计数,它会前进到匹配列表中的下一个行号。然后将行号传递给 INDEX,后者反过来提取名称。

POC


推荐阅读