- INDEX($A:$A,SMALL(IF($B$1:$B$999=$C1,ROW($1:$999),4^8),COLUMN(A1)))&""
- INDEX($A:$A,LARGE(IF($B$1:$B$999=$C2,ROW($1:$999),0),2))&""
- ctrl+shift+enter输出数组公式
- 可见为了取到合适的行号,small里故意用if 让非匹配值返回为65536,而large里,故意用if 让非匹配值,返回了0,(可能有时候需要返回一个极度小的负数)
消化下面的这些
公式拆解
首先,它是一个数组公式
COLUMN(A$1)
从F列往右,返回值为1,2,3,4,5,6……序列数,表示匹配到的第几个值
ROW($1:$2000)
返回1:2000 各行的行号
IF($A$1:$A$2000=$E1,ROW($1:$2000),4^8)
A列数据和E列当前行数据进行匹配,相等,则返回行号,不相等,返回一个常数4^8,即65536,在Excel2003中,它是表格的最后一行
SMALL(IF(xxx),COLUMN())
返回第COLUMN()个最小值,即依次返回A列上匹配到的值对应的行号
INDEX($B:$B,SMALL())
在B列返回SMALL指定行号的值
INDEX()&""
将结果转换为文本
{}
括弧表示这是一个数组公式