Excel精英培训网

 找回密码
 注册

一个不重复值的excel数组公式思路详解(必须记住!!!!!!!!)

热度 5已有 1135 次阅读2014-2-15 16:53 | excel

        excel数组公式一直是从函数新手到函数中手的一个门槛,跨不过这个门槛,好多问题无法解决,这里兰色就拿一个最常看到的不重复值例子,希望能给这些数组门前徘徊的新手们有所帮助。闲话少说,下面步入正题,先看例子:
        如下图,要求提取出A列有而B列没有的产品名称,结果放在E列。
               不重复值题.jpg
2011-4-20 12:18 上传
下载附件 (17.64 KB)

       思路分析:
            1、我们需要在A列统计一下,哪些在C列存在,哪些不存在,把不存在的一个个提取出来。

            2、批量判断是否存在。如果是判断产品A在C列是否存在,我样可以用下面的公式:
                     =Countif(C:C,A2)
               这里问题就来了,一个计算简单,A2:A6这么多怎么一个个统计呢?实际上Countif是支持一次使用多个元素条件分别统计的,你直接把第二个参数换成区域就可以了,这样可以统计在另一个区域中,当前区域每一个单元格的内容。即:
                    =Countif(c:c,a2:a6)
                用上述公式返回的结果不是一个,而一组数,即:{0;1;0;1;0} 这组数就是A2:A6的5个单元格内容分别在B列的个数,如B是的个数是1,C的个数是0。

            3、A2:A6在B列的个数计算出来了,我们也知道结果是0的在C列不存在的,那么我们该怎么把结果是0的A列产品提出来呢?
                 我们可能知道Index函数可以根据位置把相对应的单元格内容提取出来,如:
                   =INDEX(A:A,2) 就可以把A2单元格中的A提出来
                 那么我们下一步的工作就如何把统计个数为0的产品名称所在的行数得到。

            4、我们可以用IF函数进行判断,让结果是0的产品名称返回它所在的行数。即:

                =IF(Countif(c:c,a2:a6)=0,Row(a2:a6),65536)
                公式说明:Row(a2:a6)就是把符合条件行数显示出来
                               65536:不符合条件的返回65536,为什么是它,等下面会介绍。
                上述公式的结果就会由{0;1;0;1;0}变成     {2;65536;4;65536;6}     

            5、上面的一组数中,符合条件的显示成了它所在的行,不符的显示成了65536,怎么把符合条件的提出来呢?

                不符合条件的只有一种65536,而我们这个表中A65536是空的,所以我们可以用Small({0;1;0;1;0},数字)一个个的把这些数组提出来,符合条件的会返回相应的行,而不符合的会返回65536,这里为什么要用65536,就是一般情况下,最下面一个单元格是用不到的,它是一个空白的,我们把不符合条件显示成空白,只显示符合条件的,正好满足我们的要求。
               使用Small函数提出行数,即:
                      =SMALL(IF(COUNTIF(C:C,A2:A6)=0,ROW(A2:A6),65536),ROW(A1))
                      =Small({2;65536;4;65536;6} ,1) 的结果是2

                     这里用ROW(A1)的值是1,向下复制时会变成ROW(A2),结果是2,方便复制公式后产生一个有序的数字。

           6、行数有了,下面就可以用INDEX(区域,行数)提取产品名称了。即:
                  =INDEX(A:A,SMALL(IF(COUNTIF(C:C,A$2:A$6)=0,ROW(A$2:A$6),65536),ROW(A1)))
                注:因为多个数一起运算的,所以要按CTRL+SHIFT+ENTER数组形式输入。

           7、除去0值。通过上面的公式,你会发现,符合条件的显示出来了,下面紧跟的是0,为什么这样呢?因为我们取单元格值时,如果这个单元格的值(本例是A65536的值是空)是空值,我们返回的不是空,而是0值。而0&"" 可以显示成空白,所以公式还要进行最后一步除0工作,即:
              =INDEX(A:A,SMALL(IF(COUNTIF(C:C,A$2:A$6)=0,ROW(A$2:A$6),65536),ROW(A1)))&""

刚表态过的朋友 (0 人)

发表评论 评论 (1 个评论)

回复 siguoxiang 2014-3-4 00:43
谢谢老师分享

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-23 17:00 , Processed in 0.702138 second(s), 7 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

返回顶部