=INDEX(B:B,SMALL(IF($A$1:$A$4=INDEX(A:A,MATCH($D$1,B:B,0)),ROW($A$1:$A$4),10^4),ROW(A1)))&""
这么一样函数,从里到外解释吧,INDEX(A:A,MATCH($D$1,B:B,0)),中MATCH($D$1,B:B,0)的意思是从B列中查找D1的位置,D1用了绝对地址,下拉复制时不变,0代表精确查找,可以不写,意思一样,就是可改为MATCH($D$1,B:B,),找到D1位置后,用INDEX返回A列中这个位置的数据,IF(A$1:A$100=INDEX(A:A,MATCH(C$1,B:B,)),ROW($1:$100),4^8)这样的意思是用IF函数来判断A1:A100中与刚才返回的数据是否一致,如果是,返回A1:A100的行号,否则返回4^8,是4的次方,就是65536,用这个65536可以区别于A:A100的行号,使用INDEX返回时会返回一个零值,SMALL(IF($A$1:$A$4=INDEX(A:A,MATCH($D$1,B:B,0)),ROW($A$1:$A$4),10^4),ROW(A1))最后面的ROW(A1)就是取得A1的行号1,采用相对地址,下拉时会变成ROW(A2),即2,下拉时,这样可以取得第一小,第二小,第三小这样一个序列,INDEX(B:B,SMALL(IF($A$1:$A$4=INDEX(A:A,MATCH($D$1,B:B,0)),ROW($A$1:$A$4),10^4),ROW(A1)))这样就是把第一小的列号用INDEX返回,下拉时把第二小,第三小等的数据返回,后面&""
的意思是当A1:A100符合条件的数据用完之后,将返回65536行的数据,肯定是0,连接上一个空格,就是显示为空,不显示一个0,显得美观些.
温馨提示:答案为网友推荐,仅供参考