Excel SUBTOTAL 函数 9 和 109 有什么区别:隐藏行怎么处理
SUBTOTAL 函数的编号分两组:1-11 这组在计算时会包含手动隐藏的行,101-111 这组会排除手动隐藏的行;9 和 109 都代表求和,区别只在于是否计入被手动隐藏(右键隐藏)的行。 当你对数据使用"筛选"时,9 和 109 的结果完全相同——因为筛选掉的数据本就不参与 SUBTOTAL 的任何编号计算。
本文从 SUBTOTAL 的功能编号体系说起,解释 1-11 和 101-111 两组编号的对应关系,重点说明 9 与 109 在手动隐藏行时的行为差异、筛选时的相同表现,以及在不同统计场景下该选哪个编号。函数语法和示例基于 Microsoft Excel 和 WPS 表格的桌面端,两者在 SUBTOTAL 函数上的行为完全一致。
SUBTOTAL 的功能编号体系——两组编号的对照关系
SUBTOTAL 函数的第一个参数是功能编号,它同时决定了"做什么运算"和"是否计入手动隐藏行"两件事,这是理解 9 与 109 区别的前提。
SUBTOTAL 的第一个参数(function_num)从 1 到 111,分两组:1-11 为一组,101-111 为另一组。两组中数字个位相同的编号代表同一种运算,区别只在于对手动隐藏行的处理。下表是完整的编号对照:
| 运算功能 | 1-11 组(含手动隐藏行) | 101-111 组(排除手动隐藏行) |
| 平均值 AVERAGE | 1 | 101 |
| 计数 COUNT(含数字) | 2 | 102 |
| 计数 COUNTA(含非空) | 3 | 103 |
| 最大值 MAX | 4 | 104 |
| 最小值 MIN | 5 | 105 |
| 乘积 PRODUCT | 6 | 106 |
| 标准偏差 STDEV | 7 | 107 |
| 方差 VAR | 8 | 108 |
| 求和 SUM | 9 | 109 |
| 标准偏差(总体)STDEVP | 10 | 110 |
| 方差(总体)VARP | 11 | 111 |
记忆方法:想算什么运算,先在左列找对应数字(求和是 9);如果计算时要排除手动隐藏行,就在前面加个 1 变成 109。这样就不必死记硬背整张表。
9 和 109 都是求和——区别只在手动隐藏行
编号 9 和 109 都对应 SUM 运算,对可见数据的计算结果完全一样,唯一的区别在于是否把"手动隐藏"的行算进结果里。
假设 A1:A10 有 10 个数字,其中你右键手动隐藏了第 3、4 两行。此时:
=SUBTOTAL(9, A1:A10) 会把第 3、4 行的值也加进去——因为 9 这组编号包含手动隐藏行。
=SUBTOTAL(109, A1:A10) 会跳过第 3、4 行,只对剩余可见行求和——因为 109 这组编号排除手动隐藏行。
这就是 9 和 109 的全部区别。从公式外形看,唯一的差异就是第一个参数从 9 变成了 109;从结果看,只有当存在手动隐藏行时两者的返回值才会不同。
筛选时 9 和 109 行为相同——这是最常被误解的一点
很多人以为"109 用来做筛选求和、9 不是",这个理解不准确——筛选场景下 9 和 109 的结果完全一致,差异只出现在手动隐藏行时。
SUBTOTAL 函数有一个贯穿所有编号的底层规则:被"筛选"(AutoFilter)排除的数据,无论用 1-11 还是 101-111 的哪个编号,都不会被计入。也就是说,只要你用的是数据区域的自动筛选功能来隐藏行(行号变蓝、是筛选过滤的结果),9 和 109 返回的求和值是一样的。
两者的差异只在一种情况下出现:你通过"右键 → 隐藏"或格式菜单手动隐藏了某些行(这种隐藏不是筛选触发的)。此时 9 会把这些手动隐藏行算进去,109 会跳过它们。
判断当前隐藏属于哪种类型的方法:看行号的颜色。筛选隐藏的行,行号会变成蓝色;手动隐藏的行,行号保持正常颜色,只是行号不连续(如从 2 直接跳到 5)。这个区分决定了 9 和 109 会不会有差异。
手动隐藏行时 9 和 109 的差异实测
用一个具体例子说明手动隐藏行时的差异,这是区分两个编号最直观的方式。
假设有如下数据(A 列为月份,B 列为销售额):
| 行 | A 月份 | B 销售额 |
| 1 | 1月 | 100 |
| 2 | 2月 | 200 |
| 3 | 3月 | 300 |
| 4 | 4月 | 400 |
| 5 | 5月 | 500 |
现在右键手动隐藏第 3、4 行(即 3 月和 4 月)。此时可见的销售额是 1月、2月、5月,加起来是 800;被隐藏的 3月、4月加起来是 700。
=SUBTOTAL(9, B1:B5) 返回 1500(全部 5 行都算进去)。
=SUBTOTAL(109, B1:B5) 返回 800(只算可见行,跳过隐藏的 3、4 行)。
如果你取消手动隐藏(把 3、4 行重新显示出来),9 和 109 都会返回 1500——差异消失。验证时可以反复隐藏/取消隐藏同一行,观察两个公式的结果变化,这是理解两者区别最快的方式。
选择建议——报表用 101-111,需要包含隐藏行用 1-11
选 9 还是 109,取决于你想让手动隐藏的行是否参与统计,而不是看数据有没有被筛选——大多数业务报表应该用 109。
大多数情况下推荐使用 101-111 这组编号(即 109 而不是 9),原因如下:
- 报表统计场景:用户隐藏某些行通常是想"暂时不看这些数据",期望统计结果也排除它们。此时用 109,隐藏后的求和与肉眼看到的可见数据一致,符合直觉。
- 明细+汇总结构:很多报表是"上方明细行 + 底部小计行"的结构,当用户隐藏部分明细行查看时,用 109 的小计会自动跟随更新,而 9 的小计保持不变,可能造成"看到的数和汇总数对不上"的困惑。
什么时候反而要用 1-11 这组(即 9):
- 隐藏行只是为了临时腾出屏幕空间查看其他内容,但统计口径仍需包含全部数据——例如年终盘点时隐藏已离职员工行只看在职的,但总工资仍要算全员。
- 需要保证求和结果不受任何隐藏操作影响,作为"恒定全量统计"使用。
一个简单的选择口诀:想让统计跟着隐藏走,就用 1 开头的(101-111);想让统计恒定不变,就用不带 1 的(1-11)。
SUBTOTAL 与 SUM 的区别——为什么统计可见行要用前者
很多人在筛选或隐藏数据后用 SUM 求和,发现结果不对(包含了被筛掉/隐藏的数据),这是因为 SUM 不识别可见性,而 SUBTOTAL 专门为可见行统计设计。
SUM 函数对区域内的所有数值求和,无论这些单元格是否被筛选掉或手动隐藏——被隐藏的数据仍然参与 SUM 的计算。这就是筛选后用 SUM 得到"全量求和"而非"可见行求和"的原因。
SUBTOTAL 的设计目的正是解决可见行统计:它会自动识别并跳过被筛选排除的数据(所有编号都跳过),并根据编号组决定是否跳过手动隐藏行。因此在"筛选后求和""隐藏部分行后求和"这类场景,应该用 SUBTOTAL 而不是 SUM。
另一个区别是嵌套:SUBTOTAL 会自动忽略区域内的其他 SUBTOTAL 结果,避免重复计算;SUM 不会,如果在 SUM 的区域内有另一个 SUM 的结果,会被重复累加。当报表有多层小计时,用 SUBTOTAL 能避免层层嵌套导致的重复求和问题。
常见误用与排查
SUBTOTAL 使用中最常见的错误不是 9 和 109 选错,而是把引用区域写错或对函数行为有误解,这些都会导致结果与预期不符。
筛选后用 SUM 发现结果包含隐藏数据
这不是 SUM 出了问题,而是 SUM 本就不区分可见性。解决方法:把 SUM 改成 SUBTOTAL,根据是否需要排除手动隐藏行选择 9 或 109(通常选 109)。改完后筛选时求和会自动只算可见行。
用了 109 但隐藏行后结果没变
两种可能:一是隐藏行是筛选触发的,而非手动隐藏——此时 9 和 109 都会跳过,自然"没变化"是正常的(应该和 9 对比才有差异);二是引用区域写错了,没有覆盖到被隐藏的行。检查公式中的区域参数,确认它包含了你期望排除的行。
SUBTOTAL 嵌套导致结果翻倍
SUBTOTAL 会自动忽略区域内的其他 SUBTOTAL,所以正常嵌套不会翻倍。如果出现翻倍,通常是因为外层用的是 SUM 而非 SUBTOTAL,把内层的 SUBTOTAL 小计也算进去了。把外层也改成 SUBTOTAL 即可。
WPS 表格与 Excel 在 SUBTOTAL 上的一致性
SUBTOTAL 是电子表格的基础函数,WPS 表格与 Microsoft Excel 在这一函数上的行为完全一致。
具体包括:功能编号体系(1-11 和 101-111 两组)一致;对筛选数据的跳过规则一致;对手动隐藏行的处理规则(9 含、109 排除)一致;嵌套时忽略内层 SUBTOTAL 的逻辑一致;函数语法 =SUBTOTAL(function_num, ref1, [ref2], ...) 一致。因此本文所述的编号区别、选择建议和排查方法,在 WPS 表格和 Excel 中通用,无需分别处理。
需要说明的是:部分早期版本或特殊环境下,SUBTOTAL 对极少数边缘情况(如三维引用、某些错误值处理)可能有细微差异,但 9 和 109 对手动隐藏行和筛选行的核心处理逻辑在主流版本中一致。
常见问题
SUBTOTAL 第一个参数可以填小数吗
不可以,function_num 必须是 1-11 或 101-111 之间的整数。如果填了小数,函数会被截断取整(如 9.5 当作 9 处理),但这不是推荐做法,容易造成误解,应直接使用整数编号。
筛选后 9 和 109 结果一样,那为什么还要分两个编号
因为除了筛选,还有"手动隐藏行"这种操作。当用户用右键隐藏而非筛选隐藏时,9 和 109 的结果就会不同——这正是两组编号存在的意义。如果你从不手动隐藏行、只用筛选,那么 9 和 109 对你而言效果相同,用哪个都行。
怎么只统计可见行而不统计隐藏行
用 =SUBTOTAL(109, 区域) 即可(109 对应求和且排除手动隐藏行)。如果只是统计个数(非空单元格数),用 =SUBTOTAL(103, 区域);求平均值用 =SUBTOTAL(101, 区域)。把编号换成 101-111 组中对应的运算即可。
WPS 表格的 SUBTOTAL 和 Excel 完全一样吗
在功能编号体系、筛选/隐藏行处理逻辑、嵌套忽略规则这些核心行为上完全一致。同一个文件在 WPS 表格和 Excel 中打开,SUBTOTAL 公式的返回结果相同。因此函数写法无需区分软件。
总结
SUBTOTAL 的 9 和 109 都是求和,区别只在于:9 包含手动隐藏的行,109 排除手动隐藏的行;两者在筛选场景下结果完全一致。理解这点后,选择就很简单——业务报表和可见行统计优先用 109(101-111 组),需要恒定全量统计用 9(1-11 组)。SUBTOTAL 相比 SUM 的核心价值是能识别可见性并自动跳过被筛掉的数据,这正是筛选/隐藏后求和应该用它而不是 SUM 的根本原因。