文 / 康康哥哥
假如我们有一张表,其中有很多人名,但是我们想知道这份表里总共有多少个不重复的人名,用公式该怎么实现呢?
计算不重复人数可以用SUMPRODUCT函数和COUNTIF函数组合来实现。
我们先来看看这两个函数怎么用。
SUMPRODUCT顾名思义,一个是“SUM”,意思是求和;另一个是“PRODUCT”,意思是乘积。所以这个函数的意思就是先乘积,再把乘积的结果求和。这么说有点抽象哈,下面我们举个栗子就好懂啦。
=SUMPRODUCT(A1:A8,B1:B8):把A1:A8和B1:B8两个单元格区域中行对应的单元格的数值相乘,然后再把所有得到的乘积累加。通俗点讲,计算过程分两步:
(1)A1*B1,A2*B2,……,A8*B8;
(2)把第一步中8个值相加。
这个栗子中参数的个数是2个,实际上SUMPRODUCT函数的参数可以有很多个,也可以是一个,但是有一点要注意的是,这些参数必须是数组,并且各个数组的维数必须一致!又有点抽象对不对?稍微解释一下:
(1)所谓“数组”通俗点讲就是M行N列的一个数据区域,比如A3:C10就是一个8行3列的数组。
(2)所谓维数一致是指SUMPRODUCT函数的各个参数必须有相同的行数和列数。比如E5:G12也是一个8行3列的数组,它和A3:C10同时作为SUMPRODUCT的函数是不会出错的。但是如果不是一个8行3列的区域(比如8行2列,或者3行8列),同时作为SUMPRODUCT函数的参数是会报错“#VALUE!”滴!
(3)常用的数组是一维数组,即一行值或一列值,比如A1:D1,A1:A5等。
(4)如果SUMPRODUCT的参数只是一个单元格的数值的话,也是不算错的,因为单个单元格不就是一个1*1的数组嘛!
(5)假如SUMPRODUCT函数只有一个参数的话,那么就用不着跟谁乘了,就把数组里的各个值相加就完了。比如=SUMPRODUCT(A1:A5),其结果就=A1+A2+A3+A4+A5。
(6)如果SUMPRODUCT函数有多个参数的话,就像2个参数那样把各自对应的数组元素相乘后,再把结果相加就好了。(不难理解吧,认真脸。)
OK,废了好大劲终于把SUMPRODUCT函数的基本内容介绍完了,下面我们再来认识一下COUNTIF函数。
讲真,COUNTIF函数是一个超好用的函数!它的主要作用是统计满足条件的单元格有多少个。
语法规则是这样的:
=COUNTIF(数据区域,计数的条件)
第二个参数是计数条件,根据其要求的内容来统计第一个参数数据区域中满足条件的单元格有多少个。
还是举个栗子比较容易懂。
如图中所示,假如我们在某空白单元格中输入:
(1)=COUNTIF(H2:H9,890):表示在H2:H9数据区域中统计值为890的单元格的个数。在图中很容易看出来,只有一个单元格满足条件,那么这个公式的结果就是1;
(2)=COUNTIF(H2:H9,"<>0"):表示在H2:H9数据区域中统计不等于0的单元格的个数。很显然,除了H4是0之外,其他单元格都不等于0,因此这个公式的结果是7;
(3)=COUNTIF(H2:H9,H4):表示在H2:H9数据区域中统计值等于H4中单元格值的单元格的个数。也很容易看出来只有H4本身和H4相等,因此这个公式的结果是1;
(4)=COUNTIF(H2:H9,">"&H2):表示在H2:H9数据区域中统计数值大于H2值的单元格个数。这里注意两点:一是“>”要有引号,二是“>”和“H2”之间要用“&”连接。这个公式的结果是2,这貌似和我们在图中看到的不一样,不是只有890比32大吗,为啥结果是2?这个并不难解释哦,因为H9中的日期本质上也是数字,只是显示为日期格式而已。如果我们选中H9单元格,将其数字格式改为“常规”,或直接用快捷键“Ctrl+Shift+~”,就可以看到日期格式变成了常规格式,原来就是个数字嘛!这样是不是比32大的数字有2个了?
(5)=COUNTIF(H2:H9,"<>"):表示在H2:H9数据区域中统计不等于真空的单元格个数。我们看到H7中是没有任何内容的,是一个真空单元格,那么这个公式的值显而易见就是7了!
现在我们将两个函数都学会了,那么下面就让我们回到开头的问题,怎样用SUMPRODUCT函数和COUNTIF函数计算不重复的人数。
在D1单元格中输入公式:
=SUMPRODUCT(1/COUNTIF(A2:A15,A2:A15))
结果我们已经看到了,是8。数一数A列是不是正好有8个名字呢?
下面我们来分析一下这个公式的原理。
首先看最内层COUNTIF(A2:A15,A2:A15):表示在A2:A15这个数据区域中分别找值等于A2,A3,……A15的值有多少个,我们可以自己数一下,其结果会返回一个内存数组:
{2,2,3,3,2,2,2,1,2,1,3,1,2,2}
其次再看1/COUNTIF(A2:A15,A2:A15):表示将上述内存数组取倒数:
{1/2,1/2,1/3,1/3,1/2,1/2,1/2,1,1/2,1,1/3,1,1/2,1/2}
最后再看最外层SUMPRODUCT(1/COUNTIF(A2:A15,A2:A15)):表示将上述取倒数后的内存数组求和,很显然,如果某个名字在表中出现N次,那么取倒数后该数就会变成1/N,恰好在内存数组中又会有N个1/N,这N个1/N用SUMPRODUCT求和后变成了1。也就是说,如果有M个名字,那么整个数组求和后最后的值恰好就是M!!!
是不炒鸡赞~两个看似很简单的函数合体之后会发挥难以置信的作用,这就是Excel的奥妙所在,也是我们学习Excel的动力所在。
好了,今天就到这里了,祝所有热爱学习的孩子都能天天进步~