Menu

Excel SUBTOTAL 函数:跳过小计和筛选行的合计

=SUBTOTAL(9,C2:C8) 像 SUM 一样对 C2:C8 求和,但会忽略区域中其他 SUBTOTAL 行和被筛选隐藏的行。本文讲解函数编号 9 和 109、统计可见行数,以及忽略错误的 AGGREGATE。

本页的每张表格都是实时的:修改数字或公式,就会重新计算。

=SUBTOTAL(9,C2:C8) 像 SUM 一样对 C2:C8 中的数字求和,但有两点不同:它会跳过区域中的其他 SUBTOTAL 公式,也会跳过被筛选隐藏的行。第一个参数 9 指定做哪种计算。

小计和总计
C8
ABCDEF
1RegionItemSalesCheckResult
2NorthApple120SUM of C2:C7890
3NorthPear80
4North total200
5SouthApple200
6SouthPear45
7South total245
8Grand total445
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

C8 中的总计覆盖了整列,包括小计行,但仍然显示 445:SUBTOTAL 排除了 C4 和 C7,因为它们是 SUBTOTAL 公式。F2 用 SUM 做同样的事,结果是 890,每笔销售额都算了两遍。每个合计行都用 SUBTOTAL,你就可以添加或移动分组,而不必重写总计公式。

SUBTOTAL 的函数编号

=SUBTOTAL(function_num, ref1, [ref2], ...)
计算跳过筛选掉的行还跳过手动隐藏的行
AVERAGE1101
COUNT(数字)2102
COUNTA(非空)3103
MAX4104
MIN5105
PRODUCT6106
STDEV.S7107
STDEV.P8108
SUM9109
VAR.S10110
VAR.P11111

输入 =SUBTOTAL( 时,Excel 会显示这张列表,所以不用死记。最常用的是 9 和 109(SUM)、1(AVERAGE)以及 103(统计可见行数)。

其他计算
F2
ABCDEF
1RegionItemSalesCalculationResult
2NorthApple120AVERAGE (1)88.33
3NorthPear80COUNTA (3)6
4SouthApple200MAX (4)200
5SouthPear45MIN (5)30
6EastApple55Visible rows (103)6
7EastPlum30SUM (109)530
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

这里没有隐藏任何行,所以每一行都等于对应的普通函数:平均值 88.33、6 行、最大值 200、最小值 30、总和 530。只有在隐藏行时才会看出区别,这正是下一节要讲的。

SUBTOTAL 9 和 109,以及筛选掉的行

用 数据 > 筛选(Ctrl+Shift+L,Mac 上按 Cmd+Shift+F)开启筛选,然后在 Region 下拉列表中选择 North。其他地区的行会被隐藏:

  • =SUM(C2:C7) 仍然把六行全部加起来。
  • =SUBTOTAL(9,C2:C7) 和 =SUBTOTAL(109,C2:C7) 只加可见的 North 行。
  • =SUBTOTAL(103,A2:A7) 统计屏幕上剩下的行数:2,与状态栏中“在 6 条记录中找到 2 个”的数字相同。

这两组编号只在你手动隐藏行时有区别(选中行,右键单击 > 隐藏)。9 仍会把这些行加进去,109 则不会。如果合计应该始终和屏幕上显示的一致,就用 109。如果你隐藏行只是为了让视图更整洁,仍希望把它们算进合计,就用 9。

SUBTOTAL 只对行起作用。隐藏的 列 总是会被计入,所以在一行中横向使用 =SUBTOTAL(109,B2:G2) 也会加上隐藏的列。

得到 SUBTOTAL 最快的方法是在开启筛选时点击“自动求和”按钮:Excel 会写入 =SUBTOTAL(9,...) 而不是 SUM。数据 > 分类汇总 更进一步:在按某列排好序的列表中,它会在每组下方插入一个合计行,再加一个总计,全部用 SUBTOTAL,并提供折叠分组的分级显示按钮。

AGGREGATE:能跳过错误的 SUBTOTAL

区域中只要有一个单元格是错误值,SUM 和 SUBTOTAL 就会返回这个错误。AGGREGATE(Excel 2010 及更高版本)相当于多了一个选项参数的 SUBTOTAL;选项 6 会忽略错误值。

跳过错误值
F3
ABCDEF
1RegionItemSalesFormulaResult
2NorthApple120SUBTOTAL#N/A
3NorthPear#N/AAGGREGATE, ignore errors450
4SouthApple200AGGREGATE, MAX200
5SouthPear45
6EastApple55
7EastPlum30
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

C3 中是 #N/A,所以 F2 也显示 #N/A。F3 忽略了它,把其他五个值加起来:450。它的第一个参数和 SUBTOTAL 用的是同一套编号(9 表示 SUM,4 表示 MAX)。其他选项:5 忽略隐藏行,7 忽略隐藏行和错误值,3 忽略隐藏行、错误值以及嵌套的 SUBTOTAL 和 AGGREGATE 公式。把 C3 换成一个数字,F2 就会显示和 F3 相同的合计。

练习:对含小计的列表求总计

轮到你了:总计
C9
ABC
1RegionItemSales
2NorthApple120
3NorthPear80
4North total200
5SouthApple200
6SouthPear45
7SouthPlum60
8South total305
9Grand total
点击单元格查看它的公式。修改数字或公式,表格会重新计算。

轮到你了: 列表中每个地区下方都有一个小计。在 C9 中写一个覆盖 C2:C8 的总计,且不重复计算小计行。

为什么用了 SUBTOTAL,合计还是不对

  • 分组合计用的是 SUM。 SUBTOTAL 只跳过区域中的其他 SUBTOTAL 公式,不跳过 SUM 公式。写成 =SUM(C2:C3) 的分组合计会被再算一次。把每个合计行都改成 SUBTOTAL。
  • 行是手动隐藏的,而函数编号是 9。 改用 109。
  • 数据按列排列,而不是按行。 隐藏的列永远不会被跳过。
  • 你需要的是条件,而不是筛选。 SUBTOTAL 跟随筛选隐藏的内容。不筛选就想合计 North,请用 SUMIF。要一次汇总每个分组,数据透视表 不需要在数据中插入合计行就能做到。

常见问题

Excel 中的 SUBTOTAL 9 是什么意思?

第一个参数选择计算方式,9 表示 SUM。=SUBTOTAL(9,C2:C8) 对 C2:C8 求和,跳过被筛选隐藏的行以及区域中的其他 SUBTOTAL 公式。1 表示 AVERAGE,2 表示 COUNT,3 表示 COUNTA,4 表示 MAX,5 表示 MIN。

SUBTOTAL 9 和 109 有什么区别?

两者都会跳过被筛选隐藏的行。109 还会跳过你手动隐藏的行(右键单击 > 隐藏),而 9 仍会把它们加进去。想让合计和屏幕上显示的内容完全一致时,用 109。

筛选后怎样只对可见单元格求和?

在数据下方使用 =SUBTOTAL(9,C2:C100) 或 =SUBTOTAL(109,C2:C100)。筛选列表时,合计会变成只包含可见行。普通的 SUM 会继续把隐藏的行加进去。

怎样统计筛选后列表中的可见行数?

使用 =SUBTOTAL(103,A2:A100)。103 是跳过隐藏行的 COUNTA,所以它统计的是仍显示在屏幕上的非空单元格。

怎样对包含错误值的区域求和?

使用带选项 6(忽略错误值)的 AGGREGATE:=AGGREGATE(9,6,C2:C8)。区域中只要有一个单元格是 #N/A,SUM 和 SUBTOTAL 都会返回这个错误。

Coddy 编程语言插图

和 Coddy 一起学编程

开始