条件统计:SUMIFS/COUNTIFS/AVERAGEIFS 多条件
「这个月华东区 A 产品的销售额是多少?」「迟到超过 3 次的有几个人?」——这类问题不靠筛选后手工加,而靠条件统计函数一次成型。SUMIFS、COUNTIFS、AVERAGEIFS 是职场出镜率最高的三兄弟,参数结构一致,学会一个就会三个。
SUMIFS:按条件求和
语法(依据 Microsoft 官方文档):
=SUMIFS(sum_range, criteria_range1, criteria1, [criteria_range2, criteria2], ...)
| 参数 | 说明 |
|---|---|
| sum_range | 实际要求和的区域 |
| criteria_range1 | 第一个条件所在的区域 |
| criteria1 | 第一个条件 |
| criteria_range2… | 可选,后续区域与条件成对出现 |
注意参数顺序:求和区域在最前面,这和单条件的 SUMIF(条件在前)正好相反,是最高频的混淆点。一个验证技巧:SUMIFS 的参数永远是「先和区域、再成对的条件区+条件」,数一下参数个数是不是奇数(1 个和区 + 偶数个条件),能快速自查写串没。
订单表示例:A 列日期、B 列地区、C 列产品、D 列金额。统计「华东区、10 月、且金额大于 5000 的订单总额」:
=SUMIFS(D:D,B:B,"华东",A:A,">=2026-10-01",A:A,"<=2026-10-31",D:D,">5000")
同一个区域(日期)出现两次、方向相反,这是完全合法的——官方文档说明最多可以输入 127 组区域/条件对。条件写日期时,条件串里的日期会被解析为日期序列值参与比较;更稳的写法是引用参数单元格(日期放在 H1,条件串里用比较符拼接引用),日期改一格全表联动。
COUNTIFS:按条件计数
结构与 SUMIFS 相同,只是没有 sum_range,直接统计满足所有条件的记录数:
=COUNTIFS(B:B,"华东",D:D,">5000")
统计「华东区金额大于 5000 的订单有几笔」。考勤场景:统计某员工迟到次数。
=COUNTIFS(姓名列,"张三",状态列,"迟到")
COUNTIFS 最常见的需求是「非空计数」:数出 B 列所有非空记录,做应出勤人数统计时很实用。注意条件区里的空单元格不会被算成任何值,统计人数前先确认没有残留的空行。
AVERAGEIFS:按条件求平均
=AVERAGEIFS(D:D,B:B,"华东")
计算华东区订单的平均金额。没有匹配记录时返回 #DIV/0!,外层套 IFERROR 更友好。官方文档提示:求平均的区域里如果有 TRUE/FALSE 会被分别当 1 和 0 计算(SUMIFS 同理),混入逻辑值的表格要先清洗。
三兄弟的分工速查
| 函数 | 回答的问题 | 无匹配时的结果 |
|---|---|---|
| SUMIFS | 满足条件的加起来是多少 | 返回 0 |
| COUNTIFS | 满足条件的有几条 | 返回 0 |
| AVERAGEIFS | 满足条件的平均是多少 | #DIV/0! |
记住了「无匹配」的差异,看到 0 就知道是「没有符合的记录」还是「符合的记录都是 0」,排错方向完全不同。
条件的写法大全
条件是这三兄弟的灵魂,支持的形式比想象中多:
| 写法 | 含义 | 示例 |
|---|---|---|
| 华东(加英文引号) | 等于文本 | 精确匹配 |
| 大于 5000(引号包比较符) | 数值比较 | 大于 |
| 不等于华东 | 排除 | 排除某类 |
| 销售* | 通配符开头 | 以「销售」开头 |
| *一部 | 通配符结尾 | 以「一部」结尾 |
| ?华 | 单字符通配 | 两个字、第二字是华 |
| H2 | 引用单元格 | 条件随参数表联动 |
| TODAY() | 函数返回值 | 动态日期 |
所有文本类条件都要用英文引号包起来,比较类条件(大于、不等于)的符号也要整个包在引号里,这是写条件的基本功。
排除空值的技巧:对 B 列写「不等于空」的条件,统计非空记录数。注意条件符号「不等于」由小于号和大于号组成,直接在公式里输入这两个字符、外面包引号即可。
通配符的坑:条件里想匹配真正的星号或问号字符(比如产品名本身带星号),要在前面加波浪线转义,否则星号会被当成通配符。
条件引用的三种形态
- 直接写死:条件串里直接放文本,适合不再变的条件。
- 引用单元格:
=COUNTIFS(B:B,H2),H2 里写「华东」,改 H2 全表联动——做交互式报表的基础。 - 引用带运算的表达式:本月第一天和本月最后一天分别用 EOMONTH 加比较符拼接。EOMONTH 是 Excel 2007 起内置的函数(更早版本需加载分析工具库),参数为日期和月数偏移,返回目标月份最后一天的日期序列值。
组合起来,「本月订单数」一条公式搞定:
=COUNTIFS(A:A,">="&EOMONTH(TODAY(),-1)+1,A:A,"<="&EOMONTH(TODAY(),0))
这条公式一年四季不用改,是「参数化思维」最朴实的体现:凡是会变的值(月份、阈值、地区),一律不写进公式,而是引用单元格或函数。
单条件退化版:SUMIF/COUNTIF
单条件时 SUMIF(range, criteria, sum_range) 也能用,但参数顺序与 SUMIFS 不同(区域在前、和区域在后)。团队协作为了一致性,建议统一用 S 系列——反正单条件只是少写一对参数,全团队只记一套语法,维护成本最低。
常见误区
- 区域大小不一致。sum_range 和 criteria_range 行数不同,结果静默变错,选中时仔细核对——这是条件统计翻车的头号原因。
- 文本条件忘了引号。
=COUNTIFS(B:B,华东)会把「华东」当名称,报 #NAME?。 - 把条件区写成文本型数字。一边 00123 是文本、一边 123 是数字,COUNTIFS 不匹配,参考格式陷阱一篇的清洗方法。
- 整列引用撑爆性能。几万行的表用 D:D 尚可,几十万行建议转智能表或限定区域,否则每次重算都全表扫描,录入都卡。
与透视表的分工
三五行能说清的问题用函数;维度多、要拖拽探索的用透视表(下一章)。两者常配合:函数负责「一句话指标」(本月总额、异常单数),透视表负责「多维拆解」。
判断用哪个的标准:看指标的数量和稳定程度。每月固定那五六个指标,函数写死最直接;维度经常变、领导想自己点着看,就上透视表加切片器。
实战:三条高频统计公式
把上面零散的知识串起来,看三个月报里反复出现的真实需求。数据源是销售明细(智能表「销售」:订单日期、地区、产品、金额、状态)。
需求一:本月华东区销售额——日期区间 + 地区双条件:
=SUMIFS(销售[金额],销售[地区],"华东",销售[订单日期],">="&EOMONTH(TODAY(),-1)+1,销售[订单日期],"<="&EOMONTH(TODAY(),0))
需求二:本月迟到超过 3 次的员工数——条件区先在考勤明细里用辅助列打好「迟到」标签,再计数:
=COUNTIFS(考勤[姓名],A2,考勤[状态],"迟到")
配合大于 3 次的判断,用 COUNTIF 统计每个员工的迟到次数后再筛选,或直接在外层套条件判断。
需求三:华东区平均客单价——AVERAGEIFS 加 IFERROR 兜底:
=IFERROR(AVERAGEIFS(销售[金额],销售[地区],"华东"), "暂无数据")
三条公式覆盖了「求和、计数、求平均」三种问法,结构完全同构:换函数名、换条件,骨架不变。把这三条存成公式模板,半年内不用再从零写。 如果你每天都要写这类统计,建议把常用公式模板存起来,配上 Obsidian 知识管理实战 的归档方法,下次直接复制改区域。更进一步,让 Claude Code 完全指南 里的 AI 协作方式帮你把自然语言需求翻成公式初稿,你负责核对区域和条件——效率翻倍且不容易漏条件。
本章由 WorkBuddy 原创整理,函数行为以 Microsoft Excel 官方文档为准。
