课程咨询 加我微信EXCEL880B 试学网址http://v.excel880.com
写Excel公式难?No,看Excel公式和改Excel公式才是最难的!
前几天有位朋友在我的文章下留言,想让我讲讲“index+small”提取唯一值数组公式。说实在的,提取唯一值有很多的方法,数组公式不仅长,且计算慢,我并不推荐使用。不过我想借此讲讲怎样看网上别人写的公式。
我想朋友希望得到的效果是这样的。
朋友上网搜索了下“index、small、if”提取唯一值,我想他很快就会搜到类似这样的公式:
{=INDEX($A$1:$A$25,SMALL(IF(MATCH(A$2:A$25,A$2:A$25,0)=ROW($2:$25)-1,ROW($2:$25),4^8),ROW(A1)))}
可是……
一个唯一值都没有提取到,果然网上不靠谱多啊!
但,朋友还是想了想,觉得公式中的引用范围和自己的不一样,改了改。
于是就成功的将唯一值提取出来了。
可是,新的问题又出现了,公式写死了单元格引用范围,添加新数据,没反应!删除数据,结果却又都变成了“#N/A”了!
难不成,每次增减数字后,都要重新修改下公式吗?
No,No,No!还是放弃这个公式吧,重新找个新的有用的公式吧。
不停地找啊找,试啊试,最终他一定会找到一个管用的,例如:
{=INDEX(A:A,SMALL(IF(ROW($A$1:$A$100)=IFERROR(MATCH($A$1:$A$100,$A$1:$A$100,0),4^8),ROW($A$1:$A$100),4^8),ROW(A1)))&""}
虽然长得要死,可到底是管用的。
然而,没几天,老板的要求变了,不要唯一值,要动态统计出现过一次的数据。
于是,朋友又开始上网找公式,试公式……忙得不亦乐乎。
相信很多人都是这样的。其实,如果花一点时间理解下公式,才能举一反三。就比如上面那个长长的公式,理解了,相信会对你的excel水平有帮助的。
看公式
步骤 ①:找到公式主体函数。
步骤 ②:学会拆分,学会按F9键!
步骤 ③:将关键部分公式或难以理解的公式单独拎出来。
步骤 ④:学会替换公式中的函数。
步骤①
先找到公式主体函数。
如图,这个数组公式的主体部分是第一个INDEX函数,公式末尾的“&""”作用在于屏蔽错误,如果删去这部分,会得到一系列“0”。
步骤②
既然知道主体部分是INDEX函数,那就需了解下INDEX函数,它有多种使用方式,图中用到的是“=INDEX(单元格范围,第几行)”。INDEX第一个参数是“A:A”,所以SMALL部分公式将会得到一个数字。我们可以选中这一部分公式,按F9键查看公式计算结果。
步骤③
第一层的INDEX剥完之后,就到了SMALL函数,同样按F9键查看SMALL参数部分计算结果。
然后是第三层的IF函数。
最后是IFERROR和MATCH函数。
MATCH函数是最里层的函数,也是这个数组公式中很关键的部分。MATCH函数得到的结果是:
{1;2;3;4;5;5;3;2;9;#N/A;#N/A;;#N/A;#N/A;#N/A…;#N/A}
至此已经将数组公式解剖好了,现在要从最里层的MATCH理解起。
MTACH函数将得到查找值第一次出现的位置,所以当有重复值值,它也只会返回相同的数字。
前面已经知道了MATCH函数的结果是一对的数字和“#N/A”,所以需要个IFERROR过滤。公式“ROW($A$1:$A$100)”将得到1-100的数组,然后“ROW数组=IFERROR结果数组”计算后,将得到一堆的:
{TRUE;TRUE;TRUE;TRUE;TRUE;FALSE;FALSE;FALSE;TRUE;TRUE;TRUE;FALSE;…;FALSE}
你会发现TURE的位置正好是不重复数据所在的行数,这样再用SMALL函数依次提取第1、2、3大的行数,最终再用INDEX根据行数得到对应的姓名。
步骤④
一般的公式都没有这个复杂,不过看公式的步骤都是类似的。理解了公式后,就要学会修改公式。
例如,给IF替换个条件公式。
{=INDEX(A:A,SMALL(IF(COUNTIF($A$1:$A$100,$A$1:$A$100)=1,ROW($A$1:$A$100),),ROW(A1)))}
这就是网上常见的另一个提取唯一值的公式。你会发现这个公式和我们前面说过的公式结果是不同的。
前一个公式用MATCH获得每个不重复姓名的行号,所以提取的是姓名下所有出现过的名字。
而这个COUNTIF公式计算的是姓名列下只出现一次(“=1”)的名字。
如果你在第1行前插入一行,你会发现公式计算结果又不正确了!
不过相信你已经会分析和修改公式了吧?