=SUMIFS(C2:C7,A2:A7,"North",B2:B7,"Apple") 把 A 列为 North 且 B 列为 Apple 的各行在 C2:C7 中的销售额加起来。要相加的区域写在最前面,然后每个条件对应一组区域和条件。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Region | Product | Sales | Condition | Total | |
| 2 | North | Apple | 120 | North, Apple | 150 | |
| 3 | South | Pear | 45 | North, over 50 | 200 | |
| 4 | North | Pear | 80 | North | 230 | |
| 5 | East | Apple | 55 | |||
| 6 | South | Apple | 200 | |||
| 7 | North | Apple | 30 |
有两行是 North 且 Apple,分别是 120 和 30,所以 F2 显示 150。F3 把销售额列既用作求和区域,又用作条件区域:North 中大于 50 的行。F4 只有一个条件,作用和 SUMIF 一样。把 B4 改成 Apple,F2 就会增加 80。
SUMIFS 的语法
=SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)
sum_range是要相加的单元格,它写在 最前面。在 SUMIF 中它写在最后:=SUMIF(A2:A7,"North",C2:C7)。把两种顺序弄混是 SUMIFS 的常见错误。如果你复制了一个 SUMIF 再添加条件,记得把求和区域移到最前面。- 每个条件是一对:一个区域和一个条件,最多 127 对。条件的写法和 SUMIF 相同:
"North"、">50"、"*apple*"、"<>",或者和运算符连接的单元格">="&G2。 - 只有所有条件都成立时,这一行才会被加进来。
- 每个区域的大小都必须相同,否则 SUMIFS 返回
#VALUE!。
SUMIFS 只有一个条件时也能用,这样写的好处是以后添加第二个条件时不用调整参数顺序。
SUMIFS 按日期范围求和
要对一个月或任意时间段求和,就把日期列用两次:一次配开始日期,一次配结束日期。把日期放在单元格中。
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Region | Product | Sales | Date | Setting | Value | |
| 2 | North | Apple | 120 | 2026-01-05 | Start | 2026-02-01 | |
| 3 | South | Pear | 45 | 2026-01-12 | End | 2026-02-28 | |
| 4 | North | Pear | 80 | 2026-02-03 | Total | 135 | |
| 5 | East | Apple | 55 | 2026-02-18 | North only | 80 | |
| 6 | South | Apple | 200 | 2026-03-02 | |||
| 7 | North | Apple | 30 | 2026-03-20 |
2 月有两笔订单,80 和 55,所以 G4 显示 135,G5 只保留 North 的那一笔。把 G3 改成 2026-03-31,就会把 3 月也包括进来。如果日期带有时间,"<="&G3 会停在最后一天的 0:00:用 "<"&G3+1 作为结束条件,那天晚些时候的订单才会被计入。
要根据单元格中的一个日期对整个月求和,可以让 EOMONTH 找到这个月的最后一天:=SUMIFS(C2:C7,D2:D7,">="&G2,D2:D7,"<="&EOMONTH(G2,0))。
SUMIFS 的“或”条件
SUMIFS 中的条件之间始终是“且”的关系。要计算 North 或 South,就给地区条件一个用大括号括起来的列表:SUMIFS 为每一项返回一个合计,再由 SUM 把它们加起来。
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Region | Product | Sales | Condition | Total | |
| 2 | North | Apple | 120 | North or South | 475 | |
| 3 | South | Pear | 45 | North or South, Apple | 350 | |
| 4 | North | Pear | 80 | Two SUMIFS | 475 | |
| 5 | East | Apple | 55 | |||
| 6 | South | Apple | 200 | |||
| 7 | North | Apple | 30 |
F2 和 F4 都得到 475,即除 East 那一行以外的全部。F3 把地区上的“或”和产品上的“且”结合在一起。列表只放在一个条件上:一个 SUMIFS 中如果有两个列表,它们会按位置一一配对,而不是尝试所有组合。
条件为空的 SUMIFS:可选的筛选条件
报表中常有一些筛选单元格,读者可以留空表示“全部”。用作条件的空单元格并不表示“任意值”:Excel 会把它当作 0,在文本列中什么都匹配不上。把它换成匹配任意文本的通配符 "*"。从列表中选择一个地区和一个产品,或者把它们清空试试。
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Region | Product | Sales | Filter | Value | ||
| 2 | North | Apple | 120 | Region | North | ||
| 3 | South | Pear | 45 | Product | |||
| 4 | North | Pear | 80 | Total | 230 | ||
| 5 | East | Apple | 55 | ||||
| 6 | South | Apple | 200 | ||||
| 7 | North | Apple | 30 |
选择了 North 而没有选择产品时,G4 把 North 的每一行都加起来:230。在 G3 中选择 Apple,结果降到 150;清空 G2,它就把所有地区的 Apple 加起来。"*" 只匹配文本,所以这种方法适用于文本列;数字列则要用一个范围,即 ">="&min 和 "<="&max。
要把某列为空或非空的行加起来,就用 "" 和 "<>" 作为条件。D 列是付款日期时,=SUMIFS(C2:C7,A2:A7,"North",D2:D7,"") 把 North 中尚未付款的销售额加起来。
练习:SUMIFS
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 1 | Region | Product | Sales | Condition | Total | |
| 2 | North | Apple | 120 | South, Apple | ||
| 3 | South | Pear | 45 | |||
| 4 | North | Pear | 80 | |||
| 5 | East | Apple | 55 | |||
| 6 | South | Apple | 200 | |||
| 7 | North | Apple | 30 | |||
| 8 | South | Apple | 75 |
轮到你了: 把地区为 South 且产品为 Apple 的销售额加起来。在 F2 中写公式。
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | Region | Product | Sales | Date | Setting | Value | |
| 2 | North | Apple | 120 | 2026-01-05 | Start | 2026-01-10 | |
| 3 | South | Pear | 45 | 2026-01-12 | End | 2026-03-05 | |
| 4 | North | Pear | 80 | 2026-02-03 | Total | ||
| 5 | East | Apple | 55 | 2026-02-18 | |||
| 6 | South | Apple | 200 | 2026-03-02 | |||
| 7 | North | Apple | 30 | 2026-03-20 | |||
| 8 | North | Plum | 65 | 2026-03-01 |
轮到你了: 把日期在 G2 到 G3 之间(含两端)的 North 销售额加起来。在 G4 中写公式。
SUMIFS、SUMIF 和 SUMPRODUCT 的对比
| 你需要 | 使用 |
|---|---|
| 一个条件 | SUMIF(range,criteria,sum_range) 或只有一对条件的 SUMIFS |
| 多个条件,全部成立 | SUMIFS(sum_range,range1,criteria1,range2,criteria2) |
| 同一列中满足几个值之一 | SUM(SUMIFS(sum_range,range,{"a","b"})) |
| 基于计算的条件(日期的月份、一列与另一列比较、单价乘以数量) | SUMPRODUCT |
| 同样的条件,但要计数 | COUNTIFS |
如果 SUMIFS 返回 0,就用 COUNTIFS 在相同的区域上逐个检查每个条件:计数为 0 的那个条件就是从来没有匹配上的,原因通常是末尾多了空格、数字以文本形式存储,或者把单元格写进了引号(写成了 ">=G2",而不是 ">="&G2)。
常见问题
SUMIF 和 SUMIFS 有什么区别?
SUMIF 只接受一个条件,求和区域写在最后:=SUMIF(A2:A7,"North",C2:C7)。SUMIFS 接受任意多个条件,求和区域写在最前面:=SUMIFS(C2:C7,A2:A7,"North",B2:B7,"Apple")。只有一个条件时,两者得到的合计相同。
SUMIFS 怎样按日期范围求和?
把日期列用两次,分别给出开始和结束:=SUMIFS(C2:C7,D2:D7,">="&G2,D2:D7,"<="&G3) 把日期在 G2 到 G3 之间(含两端)的销售额加起来。
SUMIFS 能用“或”逻辑吗?
不能直接用:它的条件之间是“且”的关系。给一个条件一个列表,再把结果加起来:=SUM(SUMIFS(C2:C7,A2:A7,{"North","South"})) 对 North 和 South 求和。
SUMIFS 为什么返回 #VALUE!?
求和区域和条件区域的大小不一样,比如 C2:C7 和 A2:A8。和 SUMIF 不同,SUMIFS 不会调整区域大小;每个区域的行数和列数都必须相同。
怎样让 SUMIFS 的某个条件变成可选的?
筛选单元格为空时,用匹配任意文本的通配符 "*" 代替它:=SUMIFS(C2:C7,A2:A7,IF(G2="","*",G2))。G2 为空时,所有地区都会被包括在内。