跳转至

SUBTOTAL 函数

1. 函数概述

SUBTOTAL 是 Excel 中用于“对列表/区域进行分类汇总”的常用函数,特别适合在筛选(AutoFilter)分组/折叠(大纲)场景下进行统计。它的核心优势在于:可以根据你选择的功能编号,实现求和、计数、平均值、最大值、最小值等多种汇总方式,并且能够按设置自动忽略隐藏行或其他小计结果,从而让汇总更可靠、更易维护。

常见应用场景包括:

  • 订单明细表筛选后,统计筛选结果的销售额/数量
  • 部门费用表按分组折叠后,只统计当前可见的明细
  • 数据清洗时,需要在同一区域快速切换“求和/平均/计数”等汇总口径

2. 基础语法

SUBTOTAL(function_num, ref1, [ref2], ...)

3. 参数说明

3.1 function_num(功能编号)

function_num 决定 SUBTOTAL 使用哪一种汇总计算,并决定是否忽略隐藏行。它是一个数字,主要分两大类:

  • 1~11:忽略“筛选隐藏行”,不忽略“手动隐藏行”(在很多版本/场景下表现为:筛选隐藏会忽略,手动隐藏是否忽略取决于 Excel 行为与数据结构)
  • 101~111:忽略“筛选隐藏行”和“手动隐藏行”(更常用、更稳妥)

下面是常用编号对照表(建议优先使用 101~111 版本):

汇总功能 不忽略手动隐藏 忽略手动隐藏
AVERAGE 平均值 1 101
COUNT 计数(数值) 2 102
COUNTA 计数(非空) 3 103
MAX 最大值 4 104
MIN 最小值 5 105
PRODUCT 乘积 6 106
STDEV.S 样本标准差 7 107
STDEV.P 总体标准差 8 108
SUM 求和 9 109
VAR.S 样本方差 10 110
VAR.P 总体方差 11 111
  • 你希望“无论筛选隐藏还是手动隐藏都不统计”,优先用 109/103/101 等 100+ 编号
  • 你只关心筛选结果(最常见),用 109(求和) 往往最省心

3.2 ref1, [ref2], ...(引用区域)

  • ref1:第一个要汇总的区域(必填)
  • [ref2], ...:额外要汇总的区域(可选)

注意点:

  • 参数通常传入单列数据区域更清晰(例如 C2:C100
  • 也可以传入多个区域并进行合并汇总(例如两段不连续区域)
  • 在列表场景中,通常对“明细列”做汇总,不建议直接对整张表(多列)做 SUBTOTAL,避免口径不清

4. 基础用法示范

下面示范以“数据在第 2 行到第 100 行”为例,你可以按自己的表结构替换区域。

4.1 对筛选后的可见行求和

需求:对金额列进行求和,筛选后只统计筛选结果。

=SUBTOTAL(109, C2:C100)

说明:

  • 109 表示 SUM 且忽略隐藏行
  • 筛选条件变化时,结果自动更新

4.2 统计可见行的“非空单元格数量”

需求:筛选后统计“订单号”列里非空的条数。

=SUBTOTAL(103, A2:A100)

说明:

  • 103 表示 COUNTA 且忽略隐藏行
  • 适合“文本/编号”列,因为它按非空计数

4.3 统计可见行的“数值数量”

需求:筛选后统计数量列中为数值的单元格个数。

=SUBTOTAL(102, D2:D100)

说明:

  • 102 表示 COUNT(仅数值)且忽略隐藏行
  • 如果该列包含空值或文本,文本不会被计入

4.4 求可见行平均值

需求:筛选后计算单价列平均值。

=SUBTOTAL(101, E2:E100)

说明:

  • 101 表示 AVERAGE 且忽略隐藏行
  • 非数值单元格会被当作不参与平均计算

4.5 求可见行最大值/最小值

需求:筛选后查看金额列最大值与最小值。

=SUBTOTAL(104, C2:C100)
=SUBTOTAL(105, C2:C100)

说明:

  • 104 最大值,105 最小值
  • 常用于筛选后快速判断波动范围

4.6 多区域合并汇总

需求:汇总两段不连续的金额区域。

=SUBTOTAL(109, C2:C20, C50:C100)

说明:

  • SUBTOTAL 支持多个引用区域作为参数
  • 适合数据被拆分、或你只想对某些段落做汇总

4.7 避免重复统计“小计中的小计”

当你的表里已经存在某些行是“分组小计”,而你在总计处又做一次汇总时,容易发生重复计入。SUBTOTAL 的特点是:在同一列里若已用 SUBTOTAL 做小计,再用 SUBTOTAL 做总计,通常可以避免把这些小计再次计入(尤其在标准小计结构中表现很好)。

示例(思路示范):

  • 每个部门末尾一行是小计:=SUBTOTAL(109, 部门明细范围)
  • 全表总计再用:=SUBTOTAL(109, 全部明细列范围)

这种结构下,总计不会把“部门小计行”当作普通明细重复累加,从而避免“双重统计”。


5. 总结

  • SUBTOTAL 适合用于列表筛选后统计分组折叠后统计,能让汇总随可见数据自动变化。
  • 记住两类编号:

    • 9/3/1 等:基础功能编号
    • 109/103/101 等:更常用,能更稳定地忽略隐藏行
  • 最常用组合:

    • 求和:=SUBTOTAL(109, 区域)
    • 计数非空:=SUBTOTAL(103, 区域)
    • 平均:=SUBTOTAL(101, 区域)
  • 维护建议:优先对单列明细区域汇总,并尽量保持数据区域结构一致,后续筛选、扩展数据都会更省心。