Skip to content

Excel 列表函数与条件汇总

🎯 核心概念

本文档总结 Excel 中用于处理结构化列表的 D 系列函数DSUMDAVERAGEDCOUNT 等)及 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 编号对照

编号功能编号(含手动隐藏)功能
1AVERAGE101AVERAGE
2COUNT102COUNT
3COUNTA103COUNTA
4MAX104MAX
5MIN105MIN
6PRODUCT106PRODUCT
7STDEV107STDEV
8STDEVP108STDEVP
9SUM109SUM
10VAR110VAR
11VARP111VARP
  • 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(或)
  • 标题必须与数据表完全一致

← 返回生产效率工具