# 条件求和与条件计数：SUMIF/SUMIFS 与 COUNTIF/COUNTIFS 的参数顺序、区域对齐和条件写法

SUMIFS 为什么把求和区域放在第一个参数、几段区域为什么必须行行对齐、带运算符和通配符的条件该怎么写才不被当成普通文字

> Excel 函数基础 · Excel 公式与引用 · 约 8 分钟 · 10 月 05 日

## 本篇要点

1. COUNTIF 与 COUNTIFS 的参数永远是“区域, 条件”成对出现；SUMIF 是“区域, 条件, [求和区域]”；只有 SUMIFS 把求和区域放在第一个参数，其余三个函数都是区域在前，这是这几个函数最容易混的地方。
2. 条件统计的工作原理是“同一行对齐”：在第 5 行找到符合条件的内容，就把求和区域第 5 行的数字加进去，因此判断区域和求和区域必须从同一行开始、行数一致。
3. SUMIFS 的每个 criteria_range 与 sum_range 必须行列数完全相同，否则返回 #VALUE!；SUMIF 允许大小不同，但会从 sum_range 左上角按 range 的形状截取，不报错却算错；COUNTIFS 要求每段区域与第一段行列数一致。
4. criteria 是一段字符串而不是算式：等值文本要加引号，带运算符的条件要连数字一起包在引号里（如 ">=60"），条件来自单元格时必须用 & 拼接（如 ">="&F1），写成 ">=F1" 会静默返回 0。
5. 通配符只对文本有效：* 匹配任意多个字符、? 匹配恰好一个字符、~ 用于转义；“包含某关键词”要用 "*关键词*"，直接写关键词名只匹配完全相等。
6. 同一列写两个条件是允许的，把同一段区域重复写两遍即可得到区间结果；不能用两个 SUMIF 相加代替，因为那是“或”的关系且重叠部分会被重复计算。
7. 结果偏小时按顺序排查：参数顺序、区域是否对齐、引号是否英文半角、条件引用是否漏 &、是否该用通配符、数字是否被存成文本；往下拖公式时区域要用 $ 锁住。

---

上一篇讲的 `IF`，是给**每一行单独**做判断：公式写在一个格子里，往下拖，一行得一个结果。但考卷上还有一类更常见的问题，问的不是“这一行算不算数”，而是“整张表里符合条件的那些，一共是多少”：

> 销售部的销售额合计是多少？
> 成绩在 90 分以上的一共有几个人？

这类问题要用四个专门的函数：`COUNTIF`、`COUNTIFS`、`SUMIF`、`SUMIFS`。四个函数里的条件写法完全一样，坑也集中在同一个地方。它们真正让人出错的三件事是：**哪个参数写在哪个位置、几段区域怎么对齐、条件那个括号里到底该写什么**。

## 从最简单的 COUNTIF 看“条件”是什么

```
=COUNTIF(B2:B21,"销售部")
```

两个参数，两个空：

- **range**：到哪一段区域里去数。
- **criteria**：数什么样的。

这个公式会数出 B2 到 B21 里内容等于“销售部”的格子有几个。

这里有一个必须先建立的认识：**criteria 不是一段算式，而是一个字符串。** Excel 不是去“执行”它，而是拿它逐个格子去比对。想通这一点，后面所有条件写法的规矩就都顺了。

- 要比文字，就把文字包在引号里：`"销售部"`。
- 要比数字，写 `65` 或者 `"65"` 都行——因为不带运算符时，Excel 默认就是“等于”。
- **一旦条件里出现运算符，运算符和数字必须一起包在引号里**，写成一个完整的字符串：`">=60"`。

`">=60"` 这一串看着别扭，但它不是“大于等于”四个字加一个数字，它是一个整体，意思是“满足大于等于 60 这个条件”。这一点和 `IF` 里写 `B2>=60` 完全不同：`IF` 那里你把算式**算出来**，交给函数；这里你把条件**描述出来**，作为文字交给函数。

顺带记一句：文本匹配**不区分大小写**，`"Tom"` 和 `"tom"` 数出来的结果一样 [3]。

## SUMIF 多出第三个参数：真正要加的是哪一列

```
=SUMIF(range, criteria, [sum_range])
```

- 第 1 个 `range`：条件拿哪一列去比。
- 第 2 个 `criteria`：比什么。
- 第 3 个 `sum_range`：真正要加起来的那列数字在哪。

比如 B 列是部门、D 列是销售额：

```
=SUMIF(B2:B21,"销售部",D2:D21)
```

意思是：在 B2:B21 里找“销售部”，找到哪一行，就把 D 列**同一行**的数加起来。

**“同一行”这三个字是整篇的关键。** B5 是“销售部”，加的就是 D5；B6 不是，D6 就跳过。所以这两段区域必须**从同一行开始、长度一样**——第 5 行的判断对应第 5 行的数字。这不是格式要求，是函数的工作原理。

第 3 个参数可以省略，省略时就把 `range` 自己加起来，也就是“在 D 列里找符合条件的数，然后加总”。

## SUMIFS 把求和区域挪到了最前面

要加两个条件，用 `SUMIFS`：

```
=SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], …)
```

对比一下就会发现别扭的地方：**`SUMIF` 的求和区域在第 3 个参数，`SUMIFS` 的求和区域跑到了第 1 个。** 微软在文档里专门把这条列出来，说它是这两个函数最常出错的原因 [2]。

```
=SUMIF(B2:B21,"销售部",D2:D21)                    ← 求和区域在最后
=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]。文档里的例子很典型：

```
=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"`，差一个符号差一整档人。

条件来自单元格时，**必须用 `&` 拼接**：

```
=SUMIF(C2:C100,">="&F1,D2:D100)
```

运算符留在引号里，单元格引用放在引号外，用 `&` 连起来。常见错法有两种：

- 写成 `">=F1"`：Excel 去找“大于等于 F1 这几个字母”的格子，一个都找不到，返回 **0，而且不报错**——静默错误，最难发现。
- 写成 `>=60`（忘了引号）或者 `">=" F1`（忘了 `&`）：公式语法错，Excel 不让过。

**第三类，通配符。** 只对文本有效，对数字无效：`*` 匹配任意多个字符，`?` 匹配恰好一个字符。要真的找 `*` 或 `?` 本身，前面加 `~` 转义 [1][3]。

```
=COUNTIF(A2:A50,"*公司*")     ← 只要含"公司"两个字就算，不限位置
=COUNTIF(A2:A50,"北京")       ← 只算恰好等于"北京"的
```

这两行的区别是考场上丢分最集中的一处：**题目问“包含某关键词”，就要用 `*关键词*`；题目问“是某地区”，就直接写地区名。**

另外，同一列上写两个条件是允许的，把同一段区域写两遍就行：

```
=COUNTIFS(B2:B7,">=9000",B2:B7,"<=22500")
=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 把“哪一列用来判断”"判断什么"“把哪一列的数字加起来”当成**三段分开的参数**；条件那一段是一个**字符串**，带运算符时要连数字一起包在引号里，要用单元格的值就用 `&` 拼。剩下的坑，全都是顺序和区域对齐没对上。

<details><summary>练习：写出公式</summary>

表：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,"张*")`

</details>

## 术语表

- 条件统计：把一条条件套在整列数据上，只挑出符合条件的那些格子来加总或计数，而不是给每一行单独出一个结果。
- criteria（条件）：SUMIF/COUNTIF 家族里单独占一个参数的“条件描述”，它是一个字符串，Excel 拿它逐个格子去比对，而不是去执行它。
- sum_range（求和区域）：真正要相加的那列数字所在区域，它和用来判断的区域要行对行对齐。
- 区域对齐：判断区域与求和区域从同一行开始、行列数一致，第 5 行的判断对应第 5 行的数字。
- 通配符：条件里的 * 和 ?，只对文本有效，用来做“包含、开头、固定长度”这类模糊匹配；~ 用来匹配 * 或 ? 本身。
- & 拼接：把留在引号里的运算符和引号外的单元格引用连成一个条件字符串的写法，如 ">="&F1。

## 来源

1. [Microsoft Support: SUMIF function — 语法、sum_range 与 range 大小不同时的实际取值、通配符与条件的引号规则](https://support.microsoft.com/en-us/office/sumif-function-169b8c99-c05c-4483-a712-1697a653039b)
2. [Microsoft Support: SUMIFS function — 语法、与 SUMIF 的参数顺序差异、区域行列数必须相同](https://support.microsoft.com/en-us/office/sumifs-function-c9e748f5-7ea7-455d-9406-611cebce642b)
3. [Microsoft Support: COUNTIF function — 参数说明、通配符用法与文本匹配不区分大小写](https://support.microsoft.com/en-us/office/countif-function-e0de10c6-f885-4e71-abb4-1f464816df34)
4. [Microsoft Support: COUNTIFS function — 语法、各段区域行列数须与第一段一致、同一区域写两个条件的例子](https://support.microsoft.com/en-us/office/countifs-function-dda3dc6e-f74e-4aee-88bc-aa8c2a866842)
5. [Microsoft Support: 修正 SUMIF/SUMIFS 中的 #VALUE! 错误 — criteria_range 与 sum_range 大小不一致的成因与改法](https://support.microsoft.com/en-us/office/how-to-correct-a-value-error-in-the-sumif-sumifs-function-e65ce689-978e-44b1-a649-160ed5f13b5a)
6. [Exceljet: COUNTIF function — 常见条件写法对照表（大于、等于、不等于、开头、空白等）](https://exceljet.net/functions/countif-function)

---

原文：https://pangzhengboyin.com/articles/sumif-sumifs-countif-countifs-arguments-5e094ec4

> **庞征博引** · 想学的，慢慢都会
>
> 庞征博引是把想学的东西写成连载的 AI 学习工具。说出想学什么，它会先了解你的基础，再把主题写成一篇篇 5–10 分钟能读完的文章；边读边问，接下来学什么跟着你走。这篇就是这样写出来的。
>
> 开始你自己的连载 → https://pangzhengboyin.com
