条件统计: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 系列——反正单条件只是少写一对参数,全团队只记一套语法,维护成本最低。

常见误区

  1. 区域大小不一致。sum_range 和 criteria_range 行数不同,结果静默变错,选中时仔细核对——这是条件统计翻车的头号原因。
  2. 文本条件忘了引号。=COUNTIFS(B:B,华东) 会把「华东」当名称,报 #NAME?。
  3. 把条件区写成文本型数字。一边 00123 是文本、一边 123 是数字,COUNTIFS 不匹配,参考格式陷阱一篇的清洗方法。
  4. 整列引用撑爆性能。几万行的表用 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 官方文档为准。