我很难找到合适的公式来准确返回所有情况下某个范围内排名前三的结果。当排名不相等时,总是1,2,3,4,5。但是,当前2个或前3个结果并列第一时,例如1,1,1,4,5,我找不到正确的公式来准确返回所有前3个结果。
E3:E6处的数组'Helper'公式范围与F3:F6处的'Top 3'范围完美配合,因此排名排序逻辑工作正常。
在G3:G6创建“前3名列表”范围的最后一步是出错了。我尝试了很多变体,包括我不熟悉的数组公式,但是没有用。迄今为止最好的是MATCH&SMALL组合,但不适合重复。 (见下文)
请问有人知道即使重复的排名也会返回准确的“前3名列表”的公式吗?谢谢!
PS:这是我的第一条要求。 Stackoverflow帮助了我很多次
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
答案 0 :(得分:0)
从我所看到的,您引用的是前3列,如果出现并列,则始终为“ 1”。您不应该为此使用Helper列吗?
=OFFSET($A$2,MATCH(SMALL($C$3:$C$7,E4),$C$3:$C$7,0),0)
答案 1 :(得分:0)
此答案将按显示在列表中的顺序返回前三个结果。甚至有可能省去helper列,但是我没有做那么多的测试。我对您的列表进行了重新排序,以便它不只是抓住前三行。否则,就像对列表进行排序并链接到前三行一样简单。
=AGGREGATE(14,6,$C$4:$C$8,ROW(A1))
假定您的数据在B4:C8中。向下复制公式,直到将其分成三行。汇总为14将按从大到小的顺序对您进行排序。 Row(A1)将返回排序列表中的第一个值。复制下来时,它将增加到row(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,然后由INDEX提取名称。