关于INDEX和small数组公式的疑问,请excel高手帮忙

关于这样的数组公式:{=INDEX(B:B,small(if($d$2:$d$11=$b$13,row($d$2:$d$11),100),row(1:1)))&""},
1.对于INDEX内容不是太理解,用公式验证却发现少了几个部分,不解。
2.对于公式中最后面的部分:“&""”不懂。
请excel高手帮忙解释。单个函数我都会用,但是这个数组公式实在没辙了。

这个公式是在$d$2:$d$11筛选B13的内容 ï¼Œå¹¶è¿”回对应B列的内容。

if($d$2:$d$11=$b$13,row($d$2:$d$11),100):

如果$d$2:$d$11=$b$13,就取行号2:11,否则返回100,假设D3和D10=B13,如下图所示:

则该段公式返回

{100;3;100;100;100;100;100;100;10;100}

 

嵌套SMALL({100;3;100;100;100;100;100;100;10;100},ROW(1:1))后,分别提取第1小第2小第3小,则公式下拉的结果为3、10、100、100……

 

最后面嵌套INDEX(B:B,3、10、100、100……)&""

则分别返回B3、B10、B100、B100,B3和B10&""(连接一个零字符的空文本),不会改变原单元格(B3和B10)的内容,而B100是空单元格,&""后会返回一个空文本,如果不&"",则会返回数字0,所以公式中最后的&""就是为了D列不满B13内容的单元格返回一个空值,而不是0设置的。

 

最后的结果如下图所示:

 

知识扩展:

使用此公式,if($d$2:$d$11=$b$13,row($d$2:$d$11),100)中最后的100必须大于前面单元格区域中的所有行号(前面最大是11),且B100必须为空。

另外,如果B列中的数据原来是数字,使用此公式后,取出来的会变成文本型数据,因为连接一个空文本。

 

最后,谢谢你的提问。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-10-09
公式目的是为了将B列中对应的D2:D11=B13的值取出来。当D2:D11=B13时返回行数,否则返回100,然后用SMALL配合ROW()求出第几小的数,也就是符合条件的行号,然后用INDEX定位B:B中第几行的值。&""是为了取不到值时不显示0值,显示空值,这样比较好看。
第2个回答  2014-10-09
关于第1个问题不去管他,有些参数在默认时本来就是可以省略的。关于第2个问题即是使其为字符串,防止科学计数格式的发生。
相似回答