上一篇讲的 IF,是给 每一行单独 做判断:公式写在一个格子里,往下拖,一行得一个结果。但考卷上还有一类更常见的问题,问的不是“这一行算不算数”,而是“整张表里符合条件的那些,一共是多少”:
销售部的销售额合计是多少? 成绩在 90 分以上的一共有几个人?
这类问题要用四个专门的函数:COUNTIF、COUNTIFS、SUMIF、SUMIFS。四个函数里的条件写法完全一样,坑也集中在同一个地方。它们真正让人出错的三件事是:哪个参数写在哪个位置、几段区域怎么对齐、条件那个括号里到底该写什么。
从最简单的 COUNTIF 看“条件”是什么
1=COUNTIF(B2:B21,"销售部")两个参数,两个空:
- range:到哪一段区域里去数。
- criteria:数什么样的。
这个公式会数出 B2 到 B21 里内容等于“销售部”的格子有几个。
这里有一个必须先建立的认识:criteria 不是一段算式,而是一个字符串。 Excel 不是去“执行”它,而是拿它逐个格子去比对。想通这一点,后面所有条件写法的规矩就都顺了。
- 要比文字,就把文字包在引号里:
"销售部"。 - 要比数字,写
65或者"65"都行——因为不带运算符时,Excel 默认就是“等于”。 - 一旦条件里出现运算符,运算符和数字必须一起包在引号里,写成一个完整的字符串:
">=60"。
">=60" 这一串看着别扭,但它不是“大于等于”四个字加一个数字,它是一个整体,意思是“满足大于等于 60 这个条件”。这一点和 IF 里写 B2>=60 完全不同:IF 那里你把算式 算出来,交给函数;这里你把条件 描述出来,作为文字交给函数。
顺带记一句:文本匹配 不区分大小写,"Tom" 和 "tom" 数出来的结果一样 3。
SUMIF 多出第三个参数:真正要加的是哪一列
1=SUMIF(range, criteria, [sum_range])- 第 1 个
range:条件拿哪一列去比。 - 第 2 个
criteria:比什么。 - 第 3 个
sum_range:真正要加起来的那列数字在哪。
比如 B 列是部门、D 列是销售额:
1=SUMIF(B2:B21,"销售部",D2:D21)意思是:在 B2:B21 里找“销售部”,找到哪一行,就把 D 列 同一行 的数加起来。
“同一行”这三个字是整篇的关键。 B5 是“销售部”,加的就是 D5;B6 不是,D6 就跳过。所以这两段区域必须 从同一行开始、长度一样——第 5 行的判断对应第 5 行的数字。这不是格式要求,是函数的工作原理。
第 3 个参数可以省略,省略时就把 range 自己加起来,也就是“在 D 列里找符合条件的数,然后加总”。
SUMIFS 把求和区域挪到了最前面
要加两个条件,用 SUMIFS:
1=SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], …)对比一下就会发现别扭的地方:SUMIF 的求和区域在第 3 个参数,SUMIFS 的求和区域跑到了第 1 个。 微软在文档里专门把这条列出来,说它是这两个函数最常出错的原因 2。
1=SUMIF(B2:B21,"销售部",D2:D21) ← 求和区域在最后
2=SUMIFS(D2:D21,B2:B21,"销售部",C2:C21,"华东") ← 求和区域在最前四个函数放在一起看,规律其实很清楚:
| 函数 | 参数顺序 |
|---|---|
COUNTIF | 区域, 条件 |
SUMIF | 区域, 条件, [求和区域] |
COUNTIFS | 区域1, 条件1, 区域2, 条件2, … |
SUMIFS | 求和区域, 区域1, 条件1, 区域2, 条件2, … |
除了 SUMIFS,其余三个都是“区域在前、条件紧跟”,一对一对往下排。COUNTIFS 没有求和区域这个参数(它只是数个数,没有“要加谁”的问题),所以它永远是成对出现,顺序跟 COUNTIF 一致,不会背叛你。只有 SUMIFS 是那个例外,因为它必须先把“要加的是哪一列”交代清楚。
考场上最实用的防错动作是:写完公式先不看结果,先数一数每个参数的位置对不对。
几段区域必须“对得上”
这是 SUMIFS 会直接报错、SUMIF 会悄悄算错的地方。
SUMIFS 的要求是硬的:每个 criteria_range 必须和 sum_range 有完全相同的行数和列数,不一样就直接返回 #VALUE! 错误 5。文档里的例子很典型:
1=SUMIFS(C2:C10,A2:A12,A14,B2:B12,B14) ← 报 #VALUE!因为 C2:C10 是 9 行,而 A2:A12 是 11 行。改法就是把 C2:C10 改成 C2:C12,让三段区域行数一致 5。
SUMIF 允许大小不同,但这恰恰更危险,因为它不报错。当 sum_range 和 range 形状不一样时,Excel 会从 sum_range 的左上角开始,按 range 的行列数截一块出来加 1。比如 range 是 A1:A5、sum_range 写成了 B1:K5,实际参与计算的只有 B1:B5,后面几列被无声丢掉。
COUNTIFS 对区域大小的要求是“每一段都要和第一段行列数一样” 4。
所以稳妥的习惯是:所有区域都写成同样行数的一段,并且从同一行开始。 别用 A:A 整列(和另一段固定行数的区域混用时会出问题),也别手工圈一半。
条件怎么写才会被认出来
条件的写法就三类情况。
第一类,等一个值。 文字带引号,数字不用。这是最常用的一类,也最容易犯“该用通配符却写成等值”的错。
第二类,用比较运算符。 ">=60"、"<60"、"<>销售部",整个连引号写成一个字符串。
边界还是上一篇那个老问题:题目说“60 分及以上”就用 ">=60",说“超过 60”才用 ">60",差一个符号差一整档人。
条件来自单元格时,必须用 & 拼接:
1=SUMIF(C2:C100,">="&F1,D2:D100)运算符留在引号里,单元格引用放在引号外,用 & 连起来。常见错法有两种:
- 写成
">=F1":Excel 去找“大于等于 F1 这几个字母”的格子,一个都找不到,返回 0,而且不报错——静默错误,最难发现。 - 写成
>=60(忘了引号)或者">=" F1(忘了&):公式语法错,Excel 不让过。
第三类,通配符。 只对文本有效,对数字无效:* 匹配任意多个字符,? 匹配恰好一个字符。要真的找 * 或 ? 本身,前面加 ~ 转义 13。
1=COUNTIF(A2:A50,"*公司*") ← 只要含"公司"两个字就算,不限位置
2=COUNTIF(A2:A50,"北京") ← 只算恰好等于"北京"的这两行的区别是考场上丢分最集中的一处:题目问“包含某关键词”,就要用 *关键词*;题目问“是某地区”,就直接写地区名。
另外,同一列上写两个条件是允许的,把同一段区域写两遍就行:
1=COUNTIFS(B2:B7,">=9000",B2:B7,"<=22500")
2=SUMIFS(D2:D100,C2:C100,">="&F1,C2:C100,"<="&G1)两段区域是同一列,两个条件都成立才计数(或才加总),得到的就是区间内的个数或金额 4。不要写成两个 SUMIF 相加:那样算出的是“满足条件一的”加“满足条件二的”,是“或”的关系,而且两段区间重叠的部分会被算两次。
结果不对时按这个顺序查
拿到一个 0 或者明显偏小的结果,按顺序排查:
- 顺序对不对。 如果用的是
SUMIFS,第一个参数应该是求和的数字那列,不是条件列。 - 区域对齐没有。 判断区域和求和区域是不是从同一行开始、行数一样?错位不会报错,只会算错。
- 引号是不是英文半角。 中文输入法下的引号 Excel 不认,会直接提示公式有问题。
- 条件来自单元格时有没有
&。 忘了拼接就会静默返回 0。 - 该用通配符的时候用的是等值吗。 想“包含”却写了完整名字,结果就是 0。
- 数字是不是被存成了文本。 上一篇讲过 Excel 比较时先看类型、文本永远大于数字,这套麻烦在条件统计里同样会出现。识别方法一样:数字默认靠右、文本默认靠左,左上角有绿三角;用
=ISTEXT(单元格)能确认。改法还是选中整列 → 数据 → 分列 → 一路点到“完成”,或者用=VALUE(单元格)转成真数字。
还有一件和上一篇直接相关的事:往下拖公式时,所有区域都要用 $ 锁住($B$2:$B$21),只留条件单元格和求和区域里的行号按需要变化。区域一旦跟着公式往下漂,判断的人和被加的数字就对不上行了。
一句话记住
这四个函数的机制只有一条:Excel 把“哪一列用来判断”"判断什么"“把哪一列的数字加起来”当成 三段分开的参数;条件那一段是一个 字符串,带运算符时要连数字一起包在引号里,要用单元格的值就用 & 拼。剩下的坑,全都是顺序和区域对齐没对上。
练习:写出公式
表:A 列姓名、B 列部门、C 列地区、D 列金额。
- 数出 D 列里金额大于等于 5000 的订单数。
- 求 B 列为“销售部”、C 列为“华东”的订单金额合计。
- 数出 A 列里姓名以“张”开头的员工人数。
参考答案:
=COUNTIF(D2:D100,">=5000")=SUMIFS(D2:D100,B2:B100,"销售部",C2:C100,"华东")—— 求和区域在最前面。=COUNTIF(A2:A100,"张*")