Excel - 根据非唯一标准(即相似排名)从范围内返回多个唯一查询
Excel - Returning multiple unique queries from a range based on non-unique criteria, ie similar rank
我很难找到正确的公式来准确 return 所有场景中某个范围内排名前三的结果。当排名不相等时,事情总是很好,1,2,3,4,5。然而,当前 2 或 3 个结果并列第一时,比如 1、1、1、4、5,我找不到正确的公式来 return 所有前 3 个准确。
地点排名
E3:E6 的数组 'Helper' 公式范围与 F3:F6 的 'Top 3' 范围完美配合,因此排名排序逻辑工作正常。
辅助数组
前 3 个参考范围
在 G3:G6 处创建 'Top 3 List' 范围的最后一步出错了。我尝试了很多变体,包括我不熟悉的数组公式,但 none 有效。迄今为止最好的是 MATCH & SMALL 组合,但不适合重复。 (见下文)
Top 3 - List' 公式未包含所有 3 个排名第一的位置
如果有人知道即使有重复排名也会 return 准确 'Top 3 list' 的公式?谢谢!
PS:这是我的第一个请求post。 Whosebug 帮了我很多次
No duplicates -Everything is fine
One duplicate score - 1st and 2nd top are actually #1 twice
Two duplicate scores - 1st, 2nd and 3rd top are actually #1 3x
据我所知,您引用的是前 3 列,如果出现并列,该列将始终为“1”。难道你不应该为此使用 Helper 列吗?
=OFFSET($A,MATCH(SMALL($C:$C,E4),$C:$C,0),0)
此答案将 return 前三个结果按照它们在您的列表中出现的顺序排列。甚至可以消除辅助列,但我没有测试那么远。我重新排序了你的列表,这样它就不仅仅是抓住前三行了。否则,就像对列表进行排序并链接到前三行一样简单。
帮助栏目抢分前三
=AGGREGATE(14,6,$C:$C,ROW(A1))
它假定您的数据在 B4:C8 中。向下复制公式,直到将其分成三行。与 14 聚合将使您的列表从最大到最小排序。 Row(A1) 将 return 排序列表中的第一个值。当它向下复制时,它将增加到行(A2),因此它将 return 排序列表中的第二个值,依此类推。
将排序后的分数与姓名相匹配
这假设您的前三名得分列表在 E4:E6
=INDEX(B:B,AGGREGATE(15,6,ROW($C:$C)/($C:$C=E4),COUNTIF($E:E4,E4)))
它正在查找与您排序的前三名列表中的数字相匹配的所有行号。当有重复时,由于 countif,它会前进到匹配列表中的下一个行号。然后将行号传递给 INDEX,后者依次提取名称。
我很难找到正确的公式来准确 return 所有场景中某个范围内排名前三的结果。当排名不相等时,事情总是很好,1,2,3,4,5。然而,当前 2 或 3 个结果并列第一时,比如 1、1、1、4、5,我找不到正确的公式来 return 所有前 3 个准确。
地点排名
E3:E6 的数组 'Helper' 公式范围与 F3:F6 的 'Top 3' 范围完美配合,因此排名排序逻辑工作正常。
辅助数组
前 3 个参考范围
在 G3:G6 处创建 'Top 3 List' 范围的最后一步出错了。我尝试了很多变体,包括我不熟悉的数组公式,但 none 有效。迄今为止最好的是 MATCH & SMALL 组合,但不适合重复。 (见下文)
Top 3 - List' 公式未包含所有 3 个排名第一的位置
如果有人知道即使有重复排名也会 return 准确 'Top 3 list' 的公式?谢谢!
PS:这是我的第一个请求post。 Whosebug 帮了我很多次
No duplicates -Everything is fine
One duplicate score - 1st and 2nd top are actually #1 twice
Two duplicate scores - 1st, 2nd and 3rd top are actually #1 3x
据我所知,您引用的是前 3 列,如果出现并列,该列将始终为“1”。难道你不应该为此使用 Helper 列吗?
=OFFSET($A,MATCH(SMALL($C:$C,E4),$C:$C,0),0)
此答案将 return 前三个结果按照它们在您的列表中出现的顺序排列。甚至可以消除辅助列,但我没有测试那么远。我重新排序了你的列表,这样它就不仅仅是抓住前三行了。否则,就像对列表进行排序并链接到前三行一样简单。
帮助栏目抢分前三
=AGGREGATE(14,6,$C:$C,ROW(A1))
它假定您的数据在 B4:C8 中。向下复制公式,直到将其分成三行。与 14 聚合将使您的列表从最大到最小排序。 Row(A1) 将 return 排序列表中的第一个值。当它向下复制时,它将增加到行(A2),因此它将 return 排序列表中的第二个值,依此类推。
将排序后的分数与姓名相匹配
这假设您的前三名得分列表在 E4:E6
=INDEX(B:B,AGGREGATE(15,6,ROW($C:$C)/($C:$C=E4),COUNTIF($E:E4,E4)))
它正在查找与您排序的前三名列表中的数字相匹配的所有行号。当有重复时,由于 countif,它会前进到匹配列表中的下一个行号。然后将行号传递给 INDEX,后者依次提取名称。