如何让Excel的MATCH函数跳过首个匹配项,实现重复分数的多编码匹配
解决相同分数下匹配多个对应编码的问题
核心问题分析
用INDEX+MATCH制作Top10分数榜单时,相同分数只会返回第一个匹配的编码,导致后续相同分数的单元格重复显示同一个编码,无法列出所有对应编码。
解决方案(分版本)
假设你的数据结构:
- 编码列:
A2:A100 - 分数列:
B2:B100 - Top10分数列(已用
LARGE生成):D2:D11 - 需要匹配编码的目标列:
E2:E11
方法1:数组公式(适配旧版Excel)
在E2单元格输入以下公式,按Ctrl+Shift+Enter完成数组输入,然后下拉填充:
=INDEX($A$2:$A$100,SMALL(IF($B$2:$B$100=D2,ROW($B$2:$B$100)-ROW($B$2)+1),COUNTIF($D$2:D2,D2)))
公式拆解:
IF($B$2:$B$100=D2,ROW($B$2:$B$100)-ROW($B$2)+1):筛选出所有等于当前分数的行号(相对于数据起始行的偏移量)COUNTIF($D$2:D2,D2):统计当前分数在Top10列表中已出现的次数,动态指定要取第几个匹配项SMALL:提取对应次数的行号,再用INDEX返回编码
方法2:AGGREGATE函数(无需数组输入)
如果觉得数组输入麻烦,用AGGREGATE函数可以直接输入后下拉:
=INDEX($A$2:$A$100,AGGREGATE(15,6,(ROW($B$2:$B$100)-ROW($B$2)+1)/($B$2:$B$100=D2),COUNTIF($D$2:D2,D2)))
公式拆解:
(ROW(...) - ROW($B$2)+1)/($B$2:$B$100=D2):不匹配的分数会返回错误值,匹配的返回对应行偏移量AGGREGATE(15,6,...):用15调用SMALL功能,6忽略错误值,直接提取第N个有效行号- 后续逻辑同方法1,动态取对应次数的编码
方法3:Excel 365动态数组公式
如果你用的是Excel 365,直接用FILTER配合INDEX更简洁,一次性生成所有结果:
=INDEX(FILTER($A$2:$A$100,$B$2:$B$100=D2),SEQUENCE(COUNTIF($B$2:$B$100,D2)))
把这个公式放在对应Top分数的编码单元格,会自动溢出显示所有对应编码,不用下拉。
常见问题排查
你之前尝试SMALL+ROW没成功,大概率是这两个原因:
- 没有用
COUNTIF动态指定取第几个匹配项,始终取第一个 - 旧版Excel中没按
Ctrl+Shift+Enter触发数组计算
内容的提问来源于stack exchange,提问作者djgaggo
相关产品推荐
相关产品推荐

