Excel中按条件返回最大及第二大值对应的行标签(姓名)
Excel 匹配指定列最值对应姓名的解决方案
原始表格
| Name | Point | Bonus | Total | Pos | 1st | Name | 2nd | Name | |
|---|---|---|---|---|---|---|---|---|---|
| Bob | 10 | 8 | 6 | Point | 11 | 10 | |||
| Sue | 9 | 5 | 3 | Bonus | 12 | 9 | |||
| Joe | 11 | 2 | 4 | Total | 10 | 7 | |||
| Susan | 7 | 9 | 10 | ||||||
| Tim | 1 | 12 | 4 | ||||||
| Ellie | 9 | 8 | 7 |
需求说明
已知G2单元格使用数组公式 {=LARGE(IF($B$1:$D$1 =$F2, $B:$D),1)} 可返回Pos列指定字段(如Point)的最大值,现需:
- 在H2单元格返回该最大值对应的姓名(如Point最大值11对应Joe)
- 在J2单元格返回该字段第二大值对应的姓名(如Point第二大值10对应Bob)
实现公式
1. H2单元格(最大值对应姓名)
输入以下数组公式,完成输入后按 Ctrl+Shift+Enter(Excel 2019及更早版本),Excel 365/2021直接回车即可:
{=INDEX($A:$A, MATCH(1, ($B$1:$D$1=$F2)*($B:$D=G2), 0))}
公式逻辑:
$B$1:$D$1=$F2定位Pos指定的目标数据列$B:$D=G2定位目标列中等于最大值的单元格- 两者相乘得到唯一匹配位置,通过
MATCH找到行号后,INDEX返回对应姓名
2. J2单元格(第二大值对应姓名)
若已通过I2单元格(如{=LARGE(IF($B$1:$D$1 =$F2, $B:$D),2)})得到第二大值,可使用:
{=INDEX($A:$A, MATCH(1, ($B$1:$D$1=$F2)*($B:$D=I2), 0))}
若无需依赖I2,直接嵌入第二大值计算逻辑:
{=INDEX($A:$A, MATCH(1, ($B$1:$D$1=$F2)*($B:$D=LARGE(IF($B$1:$D$1=$F2, $B:$D),2)), 0))}
同样需按数组公式规则完成输入。
内容的提问来源于stack exchange,提问作者mcclosa
相关产品推荐
相关产品推荐

