Google 表格公式 - 计数
本文介绍 COUNTIF 和 COUNTIFS
COUNTIF
COUNTIF
接收两个参数,第一个是 计数的范围,第二个是 计数的条件。
计数条件
根据官方文档的介绍,计数条件一共针对两种情况,第一种是计数范围的值是 字符串 时,另一种是计数范围的值是 数字 时。
1. 范围是字符串
此情况下,计数条件必须是一个字符串。字符串可以包含通配符,其中 ?
用于匹配单个字符,*
用于匹配 0 个或多个字符。如果要匹配 ?
或 *
,则需要用 ~
转义,比如 ~?
。
2. 范围是数字
此情况下,计数条件可以是一个数字,也可以是一个字符串。如果是一个数字,就计数等于该数字的值,如果是一个字符串,则该字符串可以只包含一个数字,也可以附加一个比较运算符前缀,支持的运算符有 =
、>
、>=
、<
、<=
、<>
,然后计数符合该比较条件的值。
计数范围
计数范围不限制单行或者单列,如果给的是一个多行多列的范围,则在整个范围内计数。另外,该参数也可以是一个可以生成数组的数组表达式。
样表
A | B | C | D | E | |
---|---|---|---|---|---|
1 | Expense | Today | T1 | T2 | T3 |
2 | Coffee | 4 | C1 | N?me | 10 |
3 | Newspaper | 1 | C2 | Name | 3 |
4 | Taxi | 10 | C345 | N?mb | 34 |
5 | Golf | 26 | C67 | 7 | |
6 | Taxi | 8 | C | 10 | |
7 | Coffee | 4 | 45 | ||
8 | Gas | 46 | |||
9 | Restaurant | 31 |
匹配字符串
- 公式:
=COUNTIF(A2:A9, "Taxi")
- 结果:2
- 说明:这里的字符串并不区分大小写,所以如果匹配
"tAXI"
也是一样的结果。
通配符 1
- 公式:
=COUNTIF(A2:A9, "G*")
- 结果:2
通配符 2
- 公式:
=COUNTIF(C2:C6, "c???")
- 结果:1
通配符 3
- 公式:
=COUNTIF(D2:D4, "N~?m?")
- 结果:2
- 说明:这里的规则是,如果条件字符串中不含
?
和*
这两个通配符,则~
就只是一个普通的符号而已,没有任何意义。但一旦条件字符串在任意位置包含通配符,则~
就会变成一个转义符,后面接通配符或者它本身会将其转义,如果后面接的不是通配符也不是它本身,则相当于不存在。这里一定注意,~
作为转义符的前提是有通配符存在。
匹配数字
- 公式:
=COUNTIF(B2:B9, 4)
- 结果:2
比较
- 公式:
=COUNTIF(B2:B9, ">=10")
- 结果:4
范围
- 公式:
=COUNTIF(A2:E9, 10)
- 结果:3
匹配空单元格
- 公式:
=COUNTIF(A2:E9, "=")
- 结果:10
- 说明:相当于计数“等于空”的单元格。有的单元格只有空格,或者通过函数计算结果为
""
,比如=""
等,这些并不算空。不会被匹配。
匹配非空单元格
- 公式:
=COUNTIF(A2:E9, "<>")
- 结果:30
- 说明:空格虽然看不见,但是会被当作普通单字符处理,并不表示空;有的单元格虽然函数计算结果为
""
,但因为有函数,也不算空。
匹配无字符单元格
- 公式:
=COUNTIF(A2:E9, "")
- 结果:10
- 说明:使用
""
作为条件,可以匹配到空单元格,以及函数计算结果为""
的单元格(比如=""
)。
COUNTIFS
其实 COUNTIFS
就是比 COUNTIF
重复多几次“范围+条件”的组合。不过这里有个限制,那就是每次范围的行列数需要保持一致。
这个倒也好理解,不过实际情况下该函数到底是怎么在多个范围里按条件计数的呢?这里经过测试之后简单描述一下。
假设在下面这个样表中,
A | B | C | D | E | F | G | H | |
---|---|---|---|---|---|---|---|---|
1 | S1 | S2 | Name | Sex | S3 | S4 | S5 | S6 |
2 | 1 | John | M | 1 | 4 | |||
3 | 2 | Tina | F | 2 | 5 | |||
4 | 3 | 1 | Lex | M | 3 | 6 | 1 | 4 |
5 | 4 | 2 | Tom | M | 2 | 5 | ||
6 | 5 | 3 | Tim | M | 3 | 6 | ||
7 | 6 | 4 | ||||||
8 | 5 | |||||||
9 | 6 |
我们使用公式 =COUNTIFS(A2:A7, ">=2", B4:B9, "<=4")
得到的结果是 3。
我们可以这样理解,在第一个范围 A2:A7
中, 每一个单元格都有一个唯一的索引,我们姑且从上到下称它们为 1,2,3……(看上去好像和值一样,但这只是一个巧合,呵呵)。在第二个范围 B4:B9
中的每一个单元格也有一个唯一的索引,也是从上到下称为 1,2,3……
这样多范围计数其实就是 计算重复出现的 索引 的个数。
比如在范围 A2:A7
中符合 ">=2"
的单元格的索引有 2,3,4,5,6。在范围 B4:B9
中符合 "<=4"
的单元格的索引有 1,2,3,4。重复出现的索引是 2,3,4,所以最后计数是 3。
同样还是在上面的样表中,我们使用公式 =COUNTIFS(C2:C6, "T*", D2:D6, "M")
得到的结果是 2。
因为符合第一个条件的单元格的索引有 2,4,5,符合第二个条件的单元格的索引有 1,3,4,5,重复的索引是 4,5,所以结果是 2。
对于范围为单行的情况下也是一样的,只不过索引可以从左往右排。
那对于多行多列的情况该怎么办呢?
其实也是一样的,只不过索引在多行或者多列中连续排。
还是上面的样表,使用公式 =COUNTIFS(E2:F4, ">2", G4:H6, "<5")
得到的结果是 2。原理同上。不过可能很少会用到,就不多解释了。