=COUNTIF(B2:B7,"North") 统计 B2:B7 中内容为 North 的单元格。COUNTIF 有两个参数:要检查的区域,以及单元格被计入时必须满足的条件。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Rep | Region | Sales | Region | Count | |
| 2 | Ana | North | 120 | North | 3 | |
| 3 | Ben | South | 45 | South | 2 | |
| 4 | Cara | North | 80 | |||
| 5 | Dan | East | 55 | |||
| 6 | Eva | South | 200 | |||
| 7 | Finn | North | 30 |
F2 统计 North 的行数。F3 做同样的事,只是条件放在单元格中:把 E3 改成 East,或修改 B 列中的某个地区,计数都会跟着变。用单元格引用就能搭建汇总表:每行一个 COUNTIF,各自指向自己的标签。
COUNTIF 语法
=COUNTIF(range, criteria)
range是要检查的单元格。它必须是工作表上的区域,例如B2:B7或B:B。criteria是条件,可以写成双引号中的文本、数字或单元格引用。下面每种形式都是一个条件:
| 条件 | 统计的单元格 |
|---|---|
"North" | 等于 North(不分大小写) |
">50" | 大于 50 |
"<>North" | 除 North 之外的任何内容,包括空白 |
55 | 等于数字 55 |
">"&F6 | 大于 F6 中的值 |
"*apple*" | 包含 apple 的文本 |
"" | 空 |
"<>" | 非空 |
COUNTIF 大于、小于或等于
把比较运算符和数字一起放在引号中:">50"、"<=50"、"<>55"。只写一个数字、不加运算符,表示“等于”。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Rep | Region | Sales | Condition | Count | |
| 2 | Ana | North | 120 | Over 50 | 4 | |
| 3 | Ben | South | 45 | 50 or less | 2 | |
| 4 | Cara | North | 80 | Exactly 55 | 1 | |
| 5 | Dan | East | 55 | Not 55 | 5 | |
| 6 | Eva | South | 200 | Limit | 100 | |
| 7 | Finn | North | 30 | Over the limit | 2 |
六笔销售中有四笔大于 50,两笔小于或等于 50,所以 F2 和 F3 相加始终等于行数。F7 从 F6 读取上限:把 F6 改成 50,F7 就会显示与 F2 相同的计数。
COUNTIF 引用单元格
当要比较的值在某个单元格中时,运算符留在引号内,再用 & 把单元格连接上去:">"&F6、"<="&F6、"<>"&E3。一个常见的 COUNTIF 错误是写成 ">F6"。在引号中,F6 只是两个字符的文本,所以 Excel 会拿每个数字与文本“F6”比较,计数几乎总是 0。
“等于某个单元格”不需要运算符:只要 E3 中有值,=COUNTIF(B2:B7,E3) 就等同于 =COUNTIF(B2:B7,"="&E3)。
COUNTIF 包含文本:通配符
COUNTIF 的条件中可以使用两种通配符。* 代表任意数量的字符,? 代表正好一个字符。"*apple*" 匹配任意位置含有 apple 的单元格,"P*" 匹配以 P 开头的单元格,"????" 匹配正好四个字符的文本。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Condition | Count | |
| 2 | Apple | contains apple | 4 | |
| 3 | Pineapple | starts with P | 3 | |
| 4 | Pear | 4 letters | 2 | |
| 5 | apple juice | equal to APPLE | 1 | |
| 6 | not Pear | 6 | ||
| 7 | Plum | empty | 1 | |
| 8 | Green apple | not empty | 6 |
把 D2 和 D5 放在一起看。"*apple*" 找到 4 个单元格,而不带通配符的 "APPLE" 只找到 1 个,就是内容正好为 Apple 的那个。不用通配符时必须整个单元格都匹配,而且匹配不区分大小写,所以 "APPLE"、"Apple" 和 "apple" 统计的是同一个单元格。
D6 展示了一个陷阱:"<>Pear" 统计出 6 个单元格,因为空的 A6 也“不是 Pear”。如果只想统计已填写且不是 Pear 的单元格,用带两个条件的 COUNTIFS:=COUNTIFS(A2:A8,"<>Pear",A2:A8,"<>")。
要使用某个单元格中的文本,把通配符和它连接起来:=COUNTIF(A2:A8,"*"&E2&"*")。要统计真正的星号或问号,在它前面加波浪号:"~*"。更多写法见通配符页面,统计所有包含文本的单元格见统计包含文本的单元格。
COUNTIF 空白与非空
上面表格中的 D7 和 D8 分别统计空单元格和已填写的单元格。"" 表示空,"<>" 表示非空。返回空字符串的公式(=IF(B2>0,B2,""))看起来是空白,"" 会把它算作空,但 "<>" 也会把它算作已填写,因为单元格中有公式。COUNTIF 统计非空单元格介绍了解决办法。
COUNTIF 统计日期
在 Excel 中日期就是数字,所以比较运算符同样适用。用 DATE 构造日期,或从单元格中取日期,再用 & 连接到运算符上。千万不要按自己所在地区的格式把日期直接写在引号里:">3/1/2026" 在美国表示 3 月 1 日,而在欧洲大部分地区表示 1 月 3 日。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Rep | Date | Condition | Count | |
| 2 | Ana | 2026-01-05 | From Feb 1 | 4 | |
| 3 | Ben | 2026-01-12 | Cutoff | 2026-03-01 | |
| 4 | Cara | 2026-02-03 | Before the cutoff | 4 | |
| 5 | Dan | 2026-02-18 | On Jan 12 | 1 | |
| 6 | Eva | 2026-03-02 | |||
| 7 | Finn | 2026-03-20 |
E2 统计 2 月 1 日及之后的四个日期。E4 统计早于 E3 中截止日期的日期:把 E3 改成 2026-02-01,结果降为 2。统计两个日期之间的数量需要两个条件,也就是 COUNTIFS:=COUNTIFS(B2:B7,">="&DATE(2026,2,1),B2:B7,"<"&DATE(2026,3,1))。
用 COUNTIF 统计重复项
用整个列表对其中某个单元格做 COUNTIF,就能知道这个值出现了多少次。大于 1 就是重复项。用 $ 锁定列表,让它在公式向下填充时保持不动。
| A | B | C | |
|---|---|---|---|
| 1 | Name | Times | Duplicate? |
| 2 | Ana | 2 | TRUE |
| 3 | Ben | 2 | TRUE |
| 4 | Cara | 1 | FALSE |
| 5 | Ana | 2 | TRUE |
| 6 | Dan | 1 | FALSE |
| 7 | Ben | 2 | TRUE |
| 8 | Eva | 1 | FALSE |
Ana 和 Ben 各出现两次,所以它们的行显示 2 和 TRUE,A2:A8 上的条件格式规则 =COUNTIF($A$2:$A$8,A2)>1 会突出显示它们。把最后一个名字改成 Cara,Cara 也会被突出显示。
=COUNTIF($A$2:A2,A2)>1(只锁定区域的起点)从顶部开始统计到每个名字自己所在的行,所以它会标记第二个 Ana,而不标记第一个。这种写法会标出你要删除的副本,并保留每个名字的第一次出现。完整方法见删除重复项。
练习:COUNTIF 引用单元格
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Order | Amount | Setting | Value | |
| 2 | A-101 | 120 | Limit | 100 | |
| 3 | A-102 | 45 | Orders over limit | ||
| 4 | A-103 | 310 | |||
| 5 | A-104 | 100 | |||
| 6 | A-105 | 85 | |||
| 7 | A-106 | 140 | |||
| 8 | A-107 | 99 |
轮到你了: 统计 B2:B8 中大于 E2 中上限的订单数。在 E3 中写公式。
通过后改一下 E2:计数应该随之变化。正好为 100 的订单并不“大于”100。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Product | Setting | Value | |
| 2 | Apple | Word | apple | |
| 3 | Pear juice | Matches | ||
| 4 | Pineapple | |||
| 5 | Banana | |||
| 6 | Green apple | |||
| 7 | Pear | |||
| 8 | Apple cider |
轮到你了: 统计 A2:A8 中名称任意位置包含 D2 中那个词的产品。在 D3 中写公式。
COUNTIF 多个条件
COUNTIF 只接受一个条件。两个或更多条件分两种情况。
所有条件都必须成立(North 且大于 50):使用 COUNTIFS,它接受成对的区域和条件。
=COUNTIFS(B2:B7,"North",C2:C7,">50")
满足任意一个条件即可(North 或 South):把两个 COUNTIF 相加,或者给一个 COUNTIF 一个用大括号括起来的列表,再对结果 SUM。
=COUNTIF(B2:B7,"North")+COUNTIF(B2:B7,"South")
=SUM(COUNTIF(B2:B7,{"North","South"}))
如果一个单元格可能同时满足两个条件("*apple*" 或 "*green*"),就不要用这种“或”的写法:Green apple 会被统计两次。对于有重叠的条件,=SUMPRODUCT(--((ISNUMBER(SEARCH("apple",A2:A8))+ISNUMBER(SEARCH("green",A2:A8)))>0)) 对每个单元格只统计一次。
区分大小写计数
COUNTIF 从不区分 Apple 和 apple。当大小写很重要时,用区分大小写的 EXACT 进行比较,再把 TRUE 结果加起来:
=SUMPRODUCT(--EXACT(A2:A8,"Apple"))
-- 把 TRUE 和 FALSE 转换成 1 和 0。SUMPRODUCT 是处理 COUNTIF 无法表达的条件的通用工具。
为什么 COUNTIF 返回 0 或计数不对
- 运算符和单元格都写在了引号里。
">F6"是在与文本 F6 比较。应写成">"&F6。 - 数据中有多余的空格。 末尾带空格的“North ”不等于“North”。先用
"North*"统计一下来确认,再用 TRIM 清理这一列。 - 以文本形式存储的数字。 像
">50"这样的条件只比较真正的数字,所以以文本形式输入的数字(左对齐,常带绿色小三角)会被跳过。先转换它们;参见以文本形式存储的数字。 - 区域指向另一个已关闭的工作簿。 在那个工作簿打开之前,COUNTIF 会返回
#VALUE!。SUMPRODUCT 没有这个限制。 - 文本超过 255 个字符。 COUNTIF 无法匹配超过 255 个字符的字符串。改为直接比较:
=SUMPRODUCT(--(A2:A8=E2))。
常见问题
Excel 中 COUNTIF 怎么用?
给它一个区域和一个条件:=COUNTIF(B2:B7,"North") 统计 B2:B7 中等于 North 的单元格,=COUNTIF(C2:C7,">50") 统计大于 50 的数字。文本和比较条件要放在双引号中。
COUNTIF 如何引用单元格作为条件?
用 & 把运算符和单元格连接起来:=COUNTIF(C2:C7,">"&F6) 统计大于 F6 中数字的值。如果把 ">F6" 都写在引号里,就是在与文本 F6 比较,通常会返回 0。
COUNTIF 区分大小写吗?
不区分。"apple"、"Apple" 和 "APPLE" 统计的单元格都一样。要区分大小写地统计,使用 =SUMPRODUCT(--EXACT(A2:A8,"Apple"))。
COUNTIF 如何设置多个条件?
对于必须同时满足的条件,使用 COUNTIFS:=COUNTIFS(B2:B7,"North",C2:C7,">50")。对于满足两个值之一的情况,把两个 COUNTIF 相加:=COUNTIF(B2:B7,"North")+COUNTIF(B2:B7,"South")。