如何用Index()和Match()获取数组中重复值的非首个匹配结果?
提取重复匹配项的第N个对应值
针对你遇到的Match函数仅返回首个匹配结果的问题,根据Excel版本不同,有以下两种可行方案:
方案1:Excel 365/2021及以上版本(支持动态数组)
直接使用FILTER函数筛选所有匹配结果,结果会自动溢出到下方单元格,无需手动下拉:
假设左侧VN_Code列是A列,对应值列是B列,右侧待匹配的VN04在单元格D2,在E2单元格输入公式:
=FILTER(B:B, A:A=D2, "无匹配结果")
执行后,所有与VN04匹配的值会依次填充到E2、E3等单元格,第二个结果就是你需要的C39。
方案2:旧版Excel(不支持动态数组)
使用INDEX+SMALL+IF的数组公式组合,定位第N个匹配值:
如果要获取VN04的第2个匹配值,在目标单元格输入:
=INDEX(B:B, SMALL(IF(A:A=D2, ROW(A:A), ""), 2))
输入完成后,需按Ctrl+Shift+Enter(Windows)或Cmd+Shift+Enter(Mac)确认数组公式,而非直接回车。
- 原理:
IF(A:A=D2, ROW(A:A), "")生成所有匹配VN04的行号数组;SMALL(..., 2)提取数组中第2个最小行号;INDEX根据行号提取B列对应的值。
另外也可以用COUNTIF构建唯一匹配标识,实现下拉自动获取第N个结果:
在E2单元格输入公式后下拉:
=INDEX(B:B, MATCH(D2&"_"&COUNTIF(A$1:A1, A:A), A:A&"_"&COUNTIF(A$1:A1, A:A), 0))
这个公式通过COUNTIF(A$1:A1, A:A)累计当前行之前的匹配次数,将VN_Code与次数拼接成唯一标识,再用Match定位对应行。
内容的提问来源于stack exchange,提问作者an nguyễn hoàng
相关产品推荐
相关产品推荐

