Excel中无需额外列查找指定值第n次出现行号的方法
嘿,这个需求我经常碰到!不用额外辅助列的话,分两种Excel版本给你提供最简洁的解法,直接一个公式就能搞定:
Excel 365/2021 动态数组解法
如果你的Excel支持动态数组函数(现在大部分新版本都支持),直接用这个公式就行(假设你要找的次数n放在C1单元格):
=INDEX(ROW(A1:A5),FILTER(ROW(A1:A5),A1:A5="a",FALSE),C1)
原理拆解:
ROW(A1:A5)先生成A1到A5的行号数组:{1,2,3,4,5}FILTER(ROW(A1:A5),A1:A5="a",FALSE)会筛选出A列值为'a'对应的行号,得到结果数组{1,2,4}- 最后用
INDEX提取这个筛选数组里的第C1个元素,正好对应你要的第n次出现的行号。
旧版Excel 数组公式解法
如果是不支持动态数组的旧版Excel,用这个数组公式(输入完成后要按Ctrl+Shift+Enter确认,不能只按回车):
=SMALL(IF(A1:A5="a",ROW(A1:A5)),C1)
原理拆解:
IF(A1:A5="a",ROW(A1:A5))会生成一个混合数组,A列是'a'的位置返回对应行号,其他位置返回#N/A错误值SMALL函数会自动忽略错误值,提取数组里第C1小的数值,也就是第n次出现'a'的行号。
额外优化:处理超出次数的情况
如果n的数值超过了'a'出现的总次数,上面的公式会返回错误值,你可以用IFERROR包裹一下,返回自定义提示:
# 365版本优化版 =IFERROR(INDEX(ROW(A1:A5),FILTER(ROW(A1:A5),A1:A5="a",FALSE),C1),"不存在该次数的匹配") # 旧版本优化版 =IFERROR(SMALL(IF(A1:A5="a",ROW(A1:A5)),C1),"不存在该次数的匹配")
内容的提问来源于stack exchange,提问作者gordon613




