重点内容
适用版本
桌面版通用(Excel 365 / 2021 / 2019 等)。
问题:筛选后 SUM 算错
筛选隐藏的行,SUM 函数仍然会把它们计算进去——因为 SUM 不管一行是不是被筛选隐藏,只要还在数据范围内就照算。
SUBTOTAL 解决筛选隐藏行的问题
公式:=SUBTOTAL(109,range)
- 第一个参数 109 相当于 SUM(求和),忽略「被筛选隐藏」的行
- 应用筛选后,SUBTOTAL 的结果会自动只计算目前显示出来的行,SUM 则不会更新
筛选后同一份数据,SUM 公式结果和 SUBTOTAL(109,...) 公式结果并排对比,数字不一样
第一参数对照表(筛选隐藏 vs 手动隐藏)
📌 关键区别:数字 1~11 和 101~111 这两组功能相同(1=AVERAGE、9=SUM、2=COUNT...,101=AVERAGE、109=SUM、102=COUNT... 依此类推),但对「手动隐藏的行」处理方式不同:
- 筛选隐藏的行:不管用 1~11 还是 101~111,SUBTOTAL 都会自动忽略,两组数字在这一点上没有差别
- 手动隐藏的行(自己选中行右键 Hide):101~111 会忽略手动隐藏的行,但 1~11 仍然会把手动隐藏的行算进去
函数速查
| 函数 | 语法 | 用途 | 例子 |
|---|---|---|---|
| SUBTOTAL | =SUBTOTAL(function_num, ref1, ...) | 汇总计算,可选择是否忽略隐藏行 | =SUBTOTAL(109,B2:B20) |
| SUM | =SUM(range) | 求和,不管行是否隐藏都会计算 | =SUM(B2:B20) |
自动生成小计的两种方式
方式一:表格总计行
- 把数据转成 Table(或 Ctrl+T)
- 勾选 Table 设计选项卡的 Total Row(总计行)
Table 设计选项卡勾选 Total Row 后,表格底部自动出现的总计行
结果:Excel 会自动在表格底部加一行,并且用的正是 SUBTOTAL 函数,不用手打公式。
方式二:大纲小计功能 (详见 EP06),Excel 在插入小计行时用的也是 SUBTOTAL 函数。
学完你会
常见错误
- 筛选数据后还在用 SUM 算总和,以为看到的数字已经排除了被筛选掉的行,实际上没有
- 参数用错,比如想忽略手动隐藏的行却用了 9(而不是 109),结果手动隐藏的行还是被算进去
- 以为 SUBTOTAL 会自动忽略「其他 SUBTOTAL 公式产生的小计行」——这其实是它的另一个特性(避免小计行被重复计入总计),但容易被误解成能处理所有嵌套情况
Sources
Blog / Website: