上一篇讲的 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 或者明显偏小的结果,按顺序排查:

  1. 顺序对不对。 如果用的是 SUMIFS,第一个参数应该是求和的数字那列,不是条件列。
  2. 区域对齐没有。 判断区域和求和区域是不是从同一行开始、行数一样?错位不会报错,只会算错。
  3. 引号是不是英文半角。 中文输入法下的引号 Excel 不认,会直接提示公式有问题。
  4. 条件来自单元格时有没有 &。 忘了拼接就会静默返回 0。
  5. 该用通配符的时候用的是等值吗。 想“包含”却写了完整名字,结果就是 0。
  6. 数字是不是被存成了文本。 上一篇讲过 Excel 比较时先看类型、文本永远大于数字,这套麻烦在条件统计里同样会出现。识别方法一样:数字默认靠右、文本默认靠左,左上角有绿三角;用 =ISTEXT(单元格) 能确认。改法还是选中整列 → 数据 → 分列 → 一路点到“完成”,或者用 =VALUE(单元格) 转成真数字。

还有一件和上一篇直接相关的事:往下拖公式时,所有区域都要用 $ 锁住($B$2:$B$21),只留条件单元格和求和区域里的行号按需要变化。区域一旦跟着公式往下漂,判断的人和被加的数字就对不上行了。

一句话记住

这四个函数的机制只有一条:Excel 把“哪一列用来判断”"判断什么"“把哪一列的数字加起来”当成 三段分开的参数;条件那一段是一个 字符串,带运算符时要连数字一起包在引号里,要用单元格的值就用 & 拼。剩下的坑,全都是顺序和区域对齐没对上。

练习:写出公式

表:A 列姓名、B 列部门、C 列地区、D 列金额。

  1. 数出 D 列里金额大于等于 5000 的订单数。
  2. 求 B 列为“销售部”、C 列为“华东”的订单金额合计。
  3. 数出 A 列里姓名以“张”开头的员工人数。

参考答案:

  1. =COUNTIF(D2:D100,">=5000")
  2. =SUMIFS(D2:D100,B2:B100,"销售部",C2:C100,"华东") —— 求和区域在最前面。
  3. =COUNTIF(A2:A100,"张*")