(Excel) 如何用公式计算第 n 个最高值的 return 列 header

(Excel) How to return column header of the nth highest values with formula

给定一个 table 如下所示:

David Mike Lisa
David 50 10 40
Mike 0 50 50
Lisa 10 40 50

我正在尝试设计一列可以自动排名和标记的公式和信息。请参阅下面的正确输出示例。

Chosen Row -> Mike (this cell is defined by the user)
Rank Number
Mike 50
Lisa 50
David 0

基本上,用户应该能够更改右上角的单元格,并让 table 的其余部分根据该输入自动调整。

在这里,用户在单元格中输入“Mike”,因此公式应该查看标记为“Mike”的行(值依次为 0、50 和 50)并告诉我一个列表得分最高的列名称及其得分。

唯一让我感到困惑的是将某些东西整合到公式中,使其跳过已经放入排名列表的名称。如您所见,那里有 2 个分数是 50。

Microsoft 网站上有一个关于处理关系的页面,但我没有完全理解他们使用 Countif 的示例,因此我无法出于我的目的对其进行翻译。在他们的示例中,他们还在名称左侧使用排名数字,但我希望尽可能不要这样做。如果 auto-fill 在某些方面对我没有帮助,我不介意手写单元格公式。

我知道有一种方法可以做到这一点。我玩过这些公式并做了很多研究。我正打算在 VBA 中对所有内容进行编码,但我觉得这样的工作量会大得多。在这一点上我是如此接近,我觉得我只是缺少一个关键要素。

如果 Office 365 中有动态公式,那么我们可以使用 SORT:

=SORT(CHOOSE({1,2},TRANSPOSE(B1:D1),TRANSPOSE(INDEX(B2:D4,MATCH(H1,A2:A4,0),0))),2,-1)

并且 Excel 会正确地溢出结果。


对于年长者,我们需要两个公式:

首先按顺序获取值:

=LARGE(INDEX($B:$D,MATCH($H,$A:$A,0),0),ROW(ZZ1))

将其放入 H2 并复制下来。

然后我们需要引用这些值来获得正确的名称:

=INDEX($B:$D,AGGREGATE(15,7,(COLUMN(INDEX($B:$D,MATCH($H,$A:$A,0),0))-MIN(COLUMN(INDEX($B:$D,MATCH($H,$A:$A,0),0)))+1)/(INDEX($B:$D,MATCH($H,$A:$A,0),0)=H2),COUNTIF($H:H2,H2)))

将其放入G2并复制下来。

我在 excel 2016 年制作,但我认为它适用于所有版本。首先我创建了一个 Rank,然后我使用了 Index 函数。在此处下载文件:

https://1drv.ms/x/s!Apn_2zN0NfqFhWT-OdNazVTlxI2n?e=WsZLuH

使用数组公式的排名代码:

=MATCH(LARGE(INDIRECT("B"&$K&":D"&$K)+COLUMN(INDIRECT("B"&$K&":D"&$K))/100000,ROW()-2),
INDIRECT("B"&$K&":D"&$K)+COLUMN(INDIRECT("B"&$K&":D"&$K))/100000,0)