SUM 家族:SUM、SUMIF、SUMIFS
一、SUM 不只是把一列加起来

=SUM(数字1,[数字2],...) 的语法简单到几乎不用解释,但它有三个常被忽略的用法。第一,它可以一次接受多个不连续的区域,例如 =SUM(C2:C50,E2:E50,G2:G50) 会把三块区域一起加总,比写三个 SUM 再相加清爽得多。第二,它可以接受常量和算式,例如 =SUM(C2:C50,100) 相当于在合计上加 100,做预算微调时很方便。第三,它可以跨工作表求和,例如 =SUM(一月:三月!C2) 会算出三张工作表 C2 单元格的总和,这种三维引用在做月度汇总时非常省事。
真正让新手翻车的不是 SUM 本身,而是 SUM 对文本的态度。SUM 会自动忽略区域里的文本、逻辑值和空单元格,这一点通常是好事:表里混着待定、未录入这类文字时,合计照样算得出来。但代价是,当数字以文本形式存储时,也就是左上角带绿色三角标的那一种,SUM 也会一声不吭地把它跳过,结果就比手工加的少。
判断一个区域里有没有文本型数字,最简单的办法是对比 =COUNT(C2:C200) 和 =COUNTA(C2:C200)。前者只数数值,后者数所有非空内容,两者不一致就说明混进了假数字。关于这两个函数的差异,可以看 计数三兄弟:COUNT、COUNTA、COUNTIF、COUNTIFS。
另一个常见错觉是以为 SUM 会跳过错误值。事实恰恰相反:只要区域里有一个 #N/A 或 #VALUE!,整个 SUM 就跟着报错,一个错值毁掉一列合计。遇到这种情况,应该先去修数据源,而不是急着用聚合函数绕过错误。
SUM 还有一个隐藏特性:它最多支持 255 个参数,单个参数可以是整个工作表的一列,例如 =SUM(C:C) 会汇总整列。这种写法很省事,但如果这一列里还放着小计行,结果就会翻倍。用整列前,先确认列里没有汇总行,或者把汇总行挪到别处。
还有一个新手常问的问题:SUM 会不会把隐藏行也算进去。答案是会。SUM 对隐藏行、筛选后的行一视同仁,全部计入合计。如果你需要只对可见单元格求和,SUM 帮不上忙,要用专门的 SUBTOTAL 函数,并且把第一参数写成 109。这一点在做筛选后的临时统计时经常出错,不少人以为筛选完合计行会跟着变,结果数字纹丝不动。
另外,合并单元格也是 SUM 的隐形杀手。如果 C 列里有跨行的合并单元格,只有左上角那一格存着数值,其他格是空的,SUM 的结果仍然正确,但一旦你按行做 SUMIF,条件区域与求和区域的行对应关系就乱了,统计出来的归属会完全错位。做数据源时,请尽量避免合并单元格,需要视觉上的合并效果,改用跨列居中对齐。
二、SUMIF:只有一个条件时用它
单条件求和用 SUMIF,语法是 =SUMIF(条件区域,条件,[求和区域])。三个参数里前两个必填,第三个可以省略。省略时,Excel 直接对条件区域本身求和,所以当条件区域和求和区域是同一列时,就不用重复写。
举个具体例子。B 列是部门,C 列是销售额,数据从第 2 行排到第 200 行。要算市场部的销售额,公式写成 =SUMIF(B2:B200,"市场部",C2:C200)。这里 B2:B200 与 C2:C200 的行数必须一致,都是 199 行,否则 Excel 会以左上角单元格为基准自动扩展尺寸,结果往往不是你要的那个数。
第三个参数省略的写法同样常用。如果直接对金额列本身设条件,比如只统计大于 5000 的金额之和,写 =SUMIF(C2:C200,">5000") 就够了,不必再写一遍求和区域。这种写法在临时核对数据时特别快。
需要反复强调的是:条件区域与求和区域的大小一旦不一致,Excel 不会给出任何错误提示,只会返回一个看起来合理但错误的数字。这类错误最难被发现,因为表格看上去一切正常。写完公式后,随手挑两三行手工验算,是值得养成的习惯。
SUMIF 的条件区域必须是真实的单元格区域,不能是内存里算出来的数组。也就是说,写 =SUMIF(B2:B200&"","市场部",C2:C200) 这种把区域加工后再当条件区域的写法是行不通的。碰到需要加工后才能比较的情况,老老实实加一列辅助列,把加工结果先落到单元格里,再做 SUMIF。多一列辅助列带来的麻烦,远小于调试一个诡异公式带来的麻烦。
性能方面也值得一提。SUMIF 与 SUMIFS 的计算效率比数组公式高很多,即便数据有十万行,几十个 SUMIFS 也能秒开。真正拖慢表格的往往不是这两个函数,而是整列引用加大量 volatile 函数的组合。所以放心用,不必因为担心卡顿而退回手工筛选。
三、SUMIFS:多条件求和,顺序和 SUMIF 相反

这是整个家族里最容易记混的地方。SUMIF 的求和区域在最后,而 SUMIFS 的求和区域在最前面,两者刚好相反。
=SUMIF(条件区域, 条件, [求和区域])
=SUMIFS(求和区域, 条件区域1, 条件1, [条件区域2, 条件2], ...)
写成实例就是 =SUMIFS(C2:C200,B2:B200,"市场部",D2:D200,">=2026/1/1"),含义是对 C 列求和,条件是 B 列等于市场部,并且 D 列的日期大于等于 2026 年 1 月 1 日。
SUMIFS 默认把所有条件做与运算,也就是所有条件必须同时满足。最多可以写 127 组条件,日常用到三四个已经算复杂了。每一组条件区域的形状都必须与求和区域一致,仍然都是 199 行。
| 函数 | 求和区域位置 | 条件个数 | 条件关系 | 典型写法 |
|---|---|---|---|---|
| SUM | 首参数即求和对象 | 0 个 | 无条件 | =SUM(C2:C200) |
| SUMIF | 最后一个参数 | 1 个 | 不涉及 | =SUMIF(B2:B200,"市场部",C2:C200) |
| SUMIFS | 第一个参数 | 1 到 127 个 | 全部同时满足 | =SUMIFS(C2:C200,B2:B200,"市场部",D2:D200,">5000") |
| SUM 加 SUMIF | 由内层决定 | 任意 | 或关系时叠加 | =SUM(SUMIF(B2:B200,{"市场部","销售部"},C2:C200)) |
记不住参数顺序时有个笨办法,也很有效:在编辑栏里输入函数名和左括号后,按 Ctrl 加 Shift 加 A,Excel 会自动把参数名补全成 =SUMIFS(sum_range,criteria_range1,criteria1) 这样的形式,你再逐个替换即可。这个快捷键在所有版本的 Excel 里都有效,比死记硬背靠谱。
如果确实需要或关系,比如算市场部加销售部的合计,有两种写法。简单的是把两个 SUMIF 相加,写成 =SUMIF(B2:B200,"市场部",C2:C200)+SUMIF(B2:B200,"销售部",C2:C200)。条件更多时改用数组常量写法,写成 =SUM(SUMIF(B2:B200,{"市场部","销售部"},C2:C200)),外层套 SUM 是因为 SUMIF 会返回两个结果,需要再汇总一次。
四、条件怎么写:比较、通配符、单元格引用
条件参数本质上是一个文本串,比较运算符必须放在引号里面。">5000"、"<=5000"、"<>已完成" 都是合法写法。注意大于等于和小于等于的符号顺序是 >= 和 <=,写成 => 或 < 在前会直接出错。
条件里引用单元格时,运算符要用连接符拼起来。例如 F1 单元格里写着部门名称,公式写成 =SUMIF(B2:B200,F1,C2:C200);如果要算大于 F1 数值的金额之和,则写成 =SUMIF(C2:C200,">"&F1)。这里引号里只放运算符,连接符把 F1 的值拼进来,拼完的字符串仍然是合法条件。
通配符只有两个:问号代表任意单个字符,星号代表任意多个字符。=SUMIF(A2:A200,"北京*",C2:C200) 会统计所有以北京开头的客户。如果要匹配星号或问号本身,要在前面加波浪号转义,写成 ~* 或 ~?,否则它们会被当成通配符处理。
条件的大小写通常不影响匹配,Excel 默认不区分大小写。也就是说 =SUMIF(B2:B200,"excel",C2:C200) 与写成 Excel 的效果相同。如果你确实需要区分大小写,SUMIF 做不到,要改用 SUMPRODUCT 配合 EXACT 函数,写法会复杂不少,日常极少用到。
日期条件强烈建议写成 ">="&DATE(2026,1,1),而不是直接写 ">=2026/1/1"。前者不受系统日期格式影响,Windows 区域设置改成月日年顺序时也不会算错;后者在部分机器上会被解析成完全不同的日期,而且不报错。空值条件也有讲究:要统计金额为空的行,条件写 "=" 即可;要统计非空的行,条件写 "<>",两者都放在引号里。
五、真实场景与搭配写法
场景一是月度部门汇总表。数据源有 5000 行,A 列日期、B 列部门、C 列金额。汇总表里 G2 是部门名称,第一行从 H1 开始横向排 1 到 12 月的月初日期。公式写成 =SUMIFS(C:C,A:A,">="&H$1,A:A,"<"&EDATE(H$1,1),B:B,$G2),向右向下填充即可。注意用美元符号锁定行或列,否则填充后区域会跑偏。用 EDATE 取次月月首,比手动写每月天数可靠得多,2 月和闰年都不会出错。
场景二是跨表取数。十二个月的数据分别放在十二张工作表,每张表的 C 列是金额。总表里写 =SUM(一月:十二月!C2:C100),前提是十二张表结构完全一致且工作表顺序连续。如果在中间插入一张无关的表,它也会被算进去,这是三维引用最大的隐藏风险。每月固定模板另存,是最省心的做法。
场景三是排除某些状态后再求和。订单表 E 列是状态,包含已取消、已退款等值。要算有效订单金额,用不等于条件写成 =SUMIFS(C2:C200,E2:E200,"<>已取消",E2:E200,"<>已退款")。这里必须用两个不等于条件做与运算,不能合并成一个条件。如果状态种类很多,反过来列白名单更稳妥,写 =SUMIFS(C2:C200,E2:E200,"已付款") 更清晰。
场景四之前先说一个高频需求:按区间分段统计。比如要把金额分成 0 到 1000、1000 到 5000、5000 以上三档,分别算总额。做法是建一张区间表,第一列写下限,第二列写上限,然后在结果列写 =SUMIFS(C:C,C:C,">="&F2,C:C,"<"&G2),向下填充三个区间即可。区间表改数字,结果立刻跟着变,比写死三串公式好维护得多。
场景四是带容错的合计。当 C 列里可能混入错误值时,可以先把错误兜底成 0 再求和。具体做法是新增辅助列写 =IFERROR(C2,0),然后对辅助列求和。兜底技巧在 XLOOKUP 与 IFERROR:新写法和兜底 里有更详细的说明。
SUM 家族常常不是单独出现的。配合 IF 做条件标记,配合绝对引用做模板,配合 TEXT 做分组标签,都是高频组合。例如要按月份文本汇总,可以在辅助列写 =TEXT(A2,"yyyy-mm") 生成月份标签,再对标签列做 SUMIF,比写日期区间直观,也方便他人看懂你的公式。
当条件是多个字段的复杂组合时,SUMIFS 的条件个数会越写越长,公式也越来越难读。这时可以换一种思路:用辅助列把多条件压缩成一个真假值,再用 SUMIF 求和。例如辅助列写 =--(B2="市场部")*(--(C2>=5000)),把复合判断变成 1 或 0,再对辅助列求和。逻辑组合的基础写法可以参考 AND、OR、NOT 与布尔运算。
还有一个搭配是条件求和加排名。先用 SUMIFS 算出每个销售员的业绩,再对结果区域做排名或取前三名,一条流水线就能出榜。极值函数的写法见 极值与排名:MAX、MIN、LARGE、SMALL、RANK。
最后一个搭配技巧:用 SUMIFS 做同比环比。假设汇总区里 H1 是本月月初,把上月写成 =EDATE(H$1,-1),本月公式与上月公式只差一个负号,两个结果相减再除以上月,就是环比增幅。把区间起止日期都放在单元格里由公式推导,整张汇总表就能靠填充柄一路拉满,不需要为每个月手工改数字。
最后提醒一句:SUM 家族只负责求和,它不会帮你检查业务口径。写公式前先确认一件事,也就是这一列到底要不要包含退货、要不要剔除内部交易、要不要按含税价统计。口径错了,公式写得再漂亮也是白搭。把口径用一句话写在表格的批注里,半年后回头看时会感谢自己。
常见问题
为什么 SUMIF 的结果是 0,但明明有符合条件的行
八成是数据里混了看不见的字符或空格。先用 =LEN(B5) 看看长度是不是比肉眼看到的多,再用查找替换把空格清掉。另一种可能是条件写成了 ="市场部",多写一个等号反而匹配不上,直接写 "市场部" 才对。还有一种情况是数字被存成文本,此时条件要写成 "5000" 而不是 5000。
SUMIFS 能不能对同一列设置两个条件
可以。比如金额大于 3000 且小于 8000,写成 =SUMIFS(C2:C200,C2:C200,">3000",C2:C200,"<8000")。同一列重复出现是允许的,只要每个条件区域的形状一致。注意公式里的小于号要写成半角符号,并且整个公式用反引号包起来书写,避免被当成别的内容解析。
求和结果比手工算的少,应该怎么排查
按三步走。第一步,用 =COUNT(C2:C200) 看数值个数是否等于预期行数,少一个就说明有文本型数字。第二步,选中该列看状态栏显示的计数与求和,和公式结果对照。第三步,把区域改成整列 =SUM(C:C) 再算一次,如果结果变大,说明原区域没覆盖全,很可能是数据行数增加了却没有同步更新公式。
SUM 遇到错误值就整体报错,有办法跳过吗
修数据源是最稳妥的办法。如果错误来自查找公式的临时状态,可以先在辅助列用 IFERROR 把错误变成 0,再交给 SUM。也有人直接在 SUM 外面套 =IFERROR(SUM(C2:C200),0),但这样会掩盖真实的数据问题,只在确认错误无害时使用。长期方案是把脏数据挡在录入环节,比如用数据验证限制下拉选项。
错误值对照:公式报了错该怎么读
下表列出 SUM 家族最常见的四种报错与处理方向。看到错误不要急着改公式,先按对照表判断是哪一类问题。
| 显示结果 | 最可能的原因 | 检查方向 | 处理建议 |
|---|---|---|---|
#VALUE! |
区域里存在真正的错误值 | 定位出错单元格 | 修数据源或用 IFERROR 兜底 |
#NAME? |
函数名拼错或用了本地化函数名 | 检查是否写成了中文函数名 | 统一用英文函数名 |
| 结果为 0 | 条件文本与数据不一致 | 检查空格、全角字符 | 用 LEN 核对长度 |
| 结果偏小 | 混有文本型数字 | 对比 COUNT 与 COUNTA | 分列转换成数值 |
WPS 里这些函数都能用吗
SUM、SUMIF、SUMIFS 在 WPS 表格里完全支持,参数顺序也一致。差别在于 WPS 的部分旧版本对数组常量写法支持不稳定,遇到 {"市场部","销售部"} 这种写法结果异常时,改回两个 SUMIF 相加最保险。另外 WPS 的动态数组行为与 Excel 365 不同,跨版本传文件前,先在目标软件里打开验一遍再发出去。
数据会不断新增,公式区域怎么一次写到位
三种做法。第一种是直接引用整列,例如 =SUMIFS(C:C,B:B,"市场部"),简单但怕列里有小计行。第二种是把数据区域转成表格,也就是按 Ctrl 加 T 创建的智能表,之后公式里出现的是表名加列名的结构化引用,新增行会自动纳入。第三种是用足够大的冗余区域,例如数据只有 500 行却写成 =SUMIFS(C2:C5000,...),多出来的空行不影响结果,代价是公式看起来不够精确。日常推荐使用第二种,既规范又能自动生成汇总行。
