c语言中的countif函数,从头细说COUNTIF函数

原标题:从头细说COUNTIF函数

小伙伴们好啊,今天和大家一起说说COUNTIF函数的那些事儿。

这个函数用于在一个指定区域内统计符合条件的个数。

函数的用法非常简单:

=COUNTIF(数据区域,指定的条件)

第一参数是数据范围,第二参数是指定的统计条件。以下几个都是常用的写法:

=COUNTIF(A:A,6)

在A列中统计有多少个6。

=COUNTIF(A:A,">6")

在A列中统计大于6的数值个数。

=COUNTIF(A:A,B1)

在A列中统计与B1内容相同的单元格个数。

=COUNTIF(A:A,">"&B1)

在A列中统计大于B1的单元格个数。

注意这里的条件写法,如果是和存放在单元格里的数值进行比较,需要先在一对英文引号中写上比较符号,然后用&与单元格地址连接才行。

另外,这个函数的第二参数还支持使用通配符,例如:

=COUNTIF(A:A,"*老师")

就是统计A列中,最后两个字是“老师”的个数,不管王老师、张老师还是苍老师,只要最后两个字是“老师”就算一个。

除了这些基础的用法,再和大家分享COUNTIF函数几个高能的应用,一起领略COUNTIF函数的魅力。

特别说明一下,后面的内容难度系数高了一些,有小伙伴看到最后可能会出现头晕脑胀以及腾云驾雾等不良反应了,哈哈。

不过看不懂也没关系,一口吃不成胖子,一天也减不成瘦子,先收藏一下备用,循序渐进慢慢学~~

一、不一样的序号

如下图所示,要在A列按部门输入序号,不同部门的序号从1开始。

0a4bde35859911f4291c64296d29523a.png

在A2单元格输入公式,向下复制:

=COUNTIF(B$2:B2,B2)

COUNTIF函数的统计区域是B$2:B2,第一个B2是行绝对引用,第二个B2,是相对引用。当公式向下复制时,就会变成B$2:B3、B$2:B4……一个不断扩展的区域,从这个动态区域中统计B列部门的个数。

二、计算不重复的人数

如下图所示,要计算C列不重复的人数。

公式为:

=SUMPRODUCT(1/COUNTIF(C2:C14,C2:C14))

3521e1379a7daf7ec497127715b43bf5.png

这是一个十分常用的统计不重复数据个数的公式。

其中包含了一个简单的数学逻辑:

任意一个数据重复出现N次,N个1/N相加,结果就是为1。

公式中“COUNTIF(C2:C14,C2:C14)”部分是数组计算,作用是分别统计C2:C14单元格区域中每个元素出现的次数。

运算过程相当于:

=COUNTIF(C2:C14,C2)

=COUNTIF(C2:C14,C3)

……

=COUNTIF(C2:C14,C14)

返回内存数组结果为:

{1;1;1;2;1;3;2;1;3;1;1;1;3}

再使用1除以返回的内存数组,得到以下结果:

{1;1;1;0.5;1;0.33333;0.5;1;0.33333;1;1;1;0.33333}

用1除,即相当于计算COUNTIF函数所返回内存数组的倒数。

为便于理解,把这一步的结果中的小数部分使用分数代替,结果为:

{1;1;1;1/2;1;1/3;0.5;1;1/3;1;1;1;1/3}

如果单元格的值在区域中是唯一值,这一步的结果是1。

如果重复出现两次,这一步的结果就有两个1/2。

如果单元格的值在区域中重复出现3次,结果就有3个1/3…

即每个元素对应的倒数合计起来结果仍是1。

最后用SUMPRODUCT函数求和,得出不重复的人员总数。

三、提取不重复名单

如下图所示,要提取C列不重复的名单。

公式为:

=INDEX(C:C,1+MATCH(,COUNTIF(E$1:E1,C$2:C$15),))&""

注意是数组公式,编辑完成后,要按Ctrl+Shift+回车。

353a10dcdb45883b0e5203eedc94d857.png

首先利用COUNTIF函数,在公式所在位置上方的单元格区域中,分别查找C$2:C$15单元格区域每个数据的个数。

公式返回一个由0和1构成的数组,如果C$2:C$15单元格区域的元素在公式上方出现过,结果就是1;如果没出现,结果就是0。

和第一个例子里一样,COUNTIF函数的第一参数是一个扩展的区域,公式的提取结果会被重复利用。

再利用MATCH函数,在COUNTIF函数返回的数组中查找第一个0的位置,也就是查找首次出现的数据所在的位置。

由于数据表的标题行占了1行,将这个数字加1,就是需要提取的不重复数据在数据表中列的位置。

再利用INDEX函数,以MATCH函数的计算结果作为索引值,提取C列对应位置上的数据。

这个公式从最后开始往上看,比较容易理解一些。

好了,今天的分享就是这些吧,坚持看完的小伙伴,别忘了转发点赞哦。

祝各位一天好心情!

责任编辑:

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值