2.3.4 精准计数COUNTIF、COUNTIFS
COUNTIF函数的含义和语法与SUMIF比较类似,不同点是前者是计数,后者是求和(事实上,计数也是求和的一种:计数等同于每一个因式都为1的求和)。COUNTIF函数用来计算区域中满足给定条件的单元格的个数,因为是求单元格的个数,所以就不用像SUMIF一样区分条件区域和求和区域。
COUNTIF函数只有两个参数,其表达式是:COUNTIF(range,criteria),中文表达式为:COUNTIF(计数区域,满足的条件)。
案例1:求符合条件的项目出现的次数。
如图2-54所示,一列的名字有重复出现的情况,使用COUNTIF函数进行条件计数时,需要求出每个名字出现的次数,在C2单元格输入公式=COUNTIF($B$2: $B$17,B2),然后将公式向下复制填充,即可实现。
图2-54 COUNTIF函数求姓名出现次数
参数1是计数区域,也就是要对$B$2:$B$17区域中的单元格进行计数;参数2是计数条件,这里使用相对引用,向下复制后依次变为:B3、B4、B5……,这样就能够依次求出每个姓名在参数1确定的区域中出现的次数。
案例2:求名字第几次出现。
我们首先要区分“第几次出现”和案例1中“出现次数”的区别,比如,Lily在数据列中重复两次,如果是统计第几次出现,则会根据出现的先后顺序标记1、2,而统计出现的次数时,两个重复的Lily都会被标记为2。
如图2-55所示,在B2单元格中输入公式=COUNTIF($A$2:A2,A2),然后将其向下填充。
图2-55 COUNTIF函数求名字第几次出现
公式=COUNTIF($A$2:A2,A2)中,参数1是重点与难点,下面重点分析。参数1使用$A$2:A2混合引用,并且单元格之间用分号连接,表示是一个连续的数据区域。初始区域$A$2:A2中,第一个$A$2是绝对引用,所以在向下复制填充的过程中是固定不变的;第二个A2是相对引用,当公式向下复制时,会变成A3、A4……。因此,参数1就会变成$A$2:A3、$A$2:A4……,它是一个不断扩展的区域。
所以,当这个区域扩展到只包含一个重复数值时,这个数值是第一次出现,比如区域扩展到$A$2:A3时,“星爷”第一次出现;当这个区域扩展到包含两个重复数值时,这个重复数据第二次出现,比如区域扩展到$A$2:A5时,“星爷”第二次出现。
参数2要随各扩展区域进行变更,所以必须用相对引用A2,在向下复制的过程中逐渐变成:A3、A4……
参数1和参数2联动的结果就是,随着区域的扩展(如图2-56所示),函数要返回的值总是这个区域最后的数值在本区域中出现的次数,这样就实现了统计重复值出现的次序。
图2-56 计算区域中最后的数值在本区域出现的次数
由计算类型的函数和IF函数组合而成的新函数还有AVERAGEIF,以及三者的变形SUMIFS、COUNTIFS和AVERAGEIFS(分别为多条件求和、计数、求平均值)。它们的语法可用一个共同的规律描述:满足一个或多个条件下,执行某种计算。其中的核心是构造条件,并且这一类函数构造条件的方法完全一样,详见图2-45中的5种条件类型。