=IF(ROW(A1)>SUM($B$1:$B$19),"",INDEX(A:A,SMALL(IF($B$1:$B$19

问题描述:

=IF(ROW(A1)>SUM($B$1:$B$19),"",INDEX(A:A,SMALL(IF($B$1:$B$19=1,ROW($1:$19),4^8),ROW(A1)))) 请问是
1个回答 分类:综合 2014-11-27

问题解答:

我来补答
这个公式的最终目的是要找出区域B1至B19中等于1的单元格,并返回对应A列上的单元格内容.
分两部分跟LZ解释,先讲后面部分:
INDEX(A:A,SMALL(IF($B$1:$B$19=1,ROW($1:$19),4^8),ROW(A1)))
这个公式中最终是要用INDEX函数查找并返回A列上对应的内容,格式是:
INDEX(返回内容所在区域,要返回这个区域的第几行的内容),所以这里的关键是要如何才能获得等于1的单元格是在第几行.
SMALL(IF($B$1:$B$19=1,ROW($1:$19),4^8),ROW(A1)) 而这部分就是要获得符合条件单元格行号的公式了.这里用IF($B$1:$B$19=1,ROW($1:$19),4^8) 去判断,如果B1至B19中等于1的话,就显示对应的1至19数字,不符合的就自然不在列了.这时再用SMALL将符合条件的行号按从小到大向下排列,ROW(A1)的结果就是1了,即用SMALL返回这些行号中的第一个最小的数字,向下复制公式就变成A2、A3..,即2、3.得到了这些有用的行号就可以用INDEX去获取对应的内容啦.
最后说一说第一部分的意思:
IF(ROW(A1)>SUM($B$1:$B$19),"",
因为B1至B19中不是所有单元格都等于1,所以当公式向下复制的时候,所有符合的内容都出现了,再下去的结果就会因为没有再找到内容而出现错误提示,这样就影响美观啦,于是就用以上公式去判断,如果公式所在的行号大于B1至B19中所有等于1的单元格的数量时,就什么都不显示了,这就能解决了美观的问题了.希望LZ能明白.
 
 
展开全文阅读
剩余:2000