Excel 列表函数与条件汇总
🎯 核心概念
本文档总结 Excel 中用于处理结构化列表的 D 系列函数(DSUM、DAVERAGE、DCOUNT 等)及 SUBTOTAL 函数。
核心作用:根据指定条件对数据进行动态聚合计算,替代手动筛选后再计算的繁琐流程。
1. D 系列函数
D 系列函数(Database Functions)专为结构化列表设计,通过条件区域实现灵活的条件筛选与计算。
1.1 通用语法
vba
=D函数(database, field, criteria)| 参数 | 说明 |
|---|---|
database | 整个数据列表区域,必须包含标题行 |
field | 要计算的列,可用列标题名称(如 "销售额")或列号 |
criteria | 条件区域,必须包含与数据列表完全一致的列标题 |
1.2 函数列表
| 函数 | 功能 | 说明 |
|---|---|---|
DSUM | 条件求和 | 计算满足条件的记录的指定字段总和 |
DAVERAGE | 条件平均值 | 计算满足条件的记录的平均值 |
DCOUNT | 条件计数(数字) | 统计满足条件的记录中包含数字的单元格数量 |
DCOUNTA | 条件计数(非空) | 统计满足条件的记录中非空的单元格数量 |
DMAX | 条件最大值 | 返回满足条件的记录中的最大值 |
DMIN | 条件最小值 | 返回满足条件的记录中的最小值 |
1.3 条件区域设置
条件区域是 D 系列函数的核心,需在工作表中单独建立一个小表格来定义筛选条件。
基本结构:
- 第一行为列标题(必须与数据表标题完全一致)
- 后续行为条件值
条件逻辑规则:
| 逻辑 | 设置方式 | 示例 |
|---|---|---|
| AND(且) | 同一行水平设置多列条件 | 部门=北方 且 类别=租金 |
| OR(或) | 同一列垂直设置多行条件 | 类别=租金 或 类别=软件 |
示例:统计"北方分部"的"租金"或"软件"类别
| 部门 | 类别 |
|--------|--------|
| 北方 | 租金 | ← 第一组条件:北方 且 租金
| 北方 | 软件 | ← 第二组条件:北方 且 软件两行之间为 OR 关系,最终筛选:(北方 且 租金) 或 (北方 且 软件)
1.4 使用示例
假设数据表在 A1:E100,条件区域在 G1:H3:
vba
=DSUM(A1:E100, "销售额", G1:H2) ' 条件求和
=DAVERAGE(A1:E100, "金额", G1:H3) ' 条件平均值
=DCOUNTA(A1:E100, "订单号", G1:H2) ' 统计记录数2. SUBTOTAL 函数
SUBTOTAL 函数用于分类汇总计算,核心特性是自动忽略被筛选隐藏的行。
2.1 语法
vba
=SUBTOTAL(function_num, ref1, [ref2], ...)2.2 function_num 编号对照
| 编号 | 功能 | 编号(含手动隐藏) | 功能 |
|---|---|---|---|
| 1 | AVERAGE | 101 | AVERAGE |
| 2 | COUNT | 102 | COUNT |
| 3 | COUNTA | 103 | COUNTA |
| 4 | MAX | 104 | MAX |
| 5 | MIN | 105 | MIN |
| 6 | PRODUCT | 106 | PRODUCT |
| 7 | STDEV | 107 | STDEV |
| 8 | STDEVP | 108 | STDEVP |
| 9 | SUM | 109 | SUM |
| 10 | VAR | 110 | VAR |
| 11 | VARP | 111 | VARP |
- 1-11:忽略筛选隐藏的行
- 101-111:同时忽略筛选隐藏和手动隐藏的行
2.3 使用示例
vba
=SUBTOTAL(9, C2:C1000) ' 对 C 列求和,随筛选自动更新
=SUBTOTAL(1, C2:C1000) ' 计算平均值
=SUBTOTAL(3, C2:C1000) ' 计数(非空)与普通 SUM 的区别:当使用 Excel 自动筛选功能时,SUBTOTAL 结果只计算可见行,而 SUM 始终计算全部数据。
3. 函数选择指南
| 维度 | D 系列函数 | SUBTOTAL |
|---|---|---|
| 条件定义方式 | 通过条件区域(公式驱动) | 通过筛选器(手动操作) |
| 适用场景 | 固定查询、动态报表、仪表板 | 临时分析、数据探索 |
| 条件复杂度 | 支持复杂的 AND/OR 组合 | 取决于筛选器功能 |
| 交互方式 | 修改条件区域即可更新结果 | 手动筛选后自动更新 |
决策流程:
4. 常见问题与注意事项
4.1 条件区域标题不匹配
⚠️ 最常见错误
D 系列函数最常见的错误。条件区域的列标题与数据表标题有任何差异(包括多余空格),函数将返回 0 或错误。
解决方案:直接从数据表复制标题到条件区域,不要手动输入。
4.2 DCOUNT 与 DCOUNTA 混淆
| 函数 | 计算对象 | 适用场景 |
|---|---|---|
DCOUNT | 仅数字单元格 | 统计数值型字段 |
DCOUNTA | 任何非空单元格 | 统计记录数、文本字段 |
💡 注意
用 DCOUNT 统计文本列(如员工姓名)将返回 0。
4.3 SUBTOTAL 函数位置
⚠️ 位置问题
将 SUBTOTAL 放在数据列表底部,筛选时该行可能被隐藏。
解决方案:将 SUBTOTAL 放置在数据列表上方或固定位置,确保筛选后始终可见。
5. 快速参考
D 系列函数模板
vba
=DSUM(数据区域, "列名", 条件区域)
=DAVERAGE(数据区域, "列名", 条件区域)
=DCOUNT(数据区域, "列名", 条件区域)
=DCOUNTA(数据区域, "列名", 条件区域)SUBTOTAL 常用编号
vba
=SUBTOTAL(9, 范围) ' SUM
=SUBTOTAL(1, 范围) ' AVERAGE
=SUBTOTAL(2, 范围) ' COUNT
=SUBTOTAL(3, 范围) ' COUNTA
=SUBTOTAL(4, 范围) ' MAX
=SUBTOTAL(5, 范围) ' MIN条件区域规则
- 同一行 = AND(且)
- 多行 = OR(或)
- 标题必须与数据表完全一致