掌握SUBTOTAL函数的双重功能,轻松应对筛选统计与动态计算!
一、SUBTOTAL函数基础介绍
函数语法
SUBTOTAL(function_num, ref1, ref2, ...)
参数详解
function_num:指定使用何种函数进行分类汇总计算
1-11:包含隐藏值的计算
101-111:忽略隐藏值的计算
ref1, ref2, ...:要计算的一个或多个单元格区域
核心特性
忽略嵌套分类汇总:避免重复计算
智能处理隐藏行:通过function_num决定是否包含隐藏值
响应筛选状态:自动忽略筛选掉的行
垂直区域专用:适用于数据列,不适用于数据行
二、Function_num参数对照表
三、实战案例精讲
案例1:智能序号生成(筛选后序号连续)
应用场景
在数据表中,使用常规序号在筛选后会出现序号断层。SUBTOTAL函数可以创建动态连续的序号。
数据准备

解决方案
=SUBTOTAL(103, $B$3:B3)
公式解析
function_num = 103:使用COUNTA函数,且忽略隐藏值
$B$3:B3:
$B$3:固定起始单元格(绝对引用)B3:相对引用,随公式下拉而变化范围从B3开始,到当前行结束
实现原理:
计算从第一行到当前行非空单元格的数量
筛选时隐藏的行会被忽略
始终保持序号连续
效果演示
筛选前:1, 2, 3, 4, 5, 6, ...
筛选部门为"生产部":1, 2, 3, 4, ...(连续序号)
取消筛选:恢复原始连续序号
视频演示:
案例2:评委打分计算(去掉最高最低分)
应用场景
比赛中需要去掉一个最高分和一个最低分,计算选手的最终平均分。
数据准备

解决方案
=SUM(SUBTOTAL({9,4,5}, B3:J3) * {1,-1,-1}) / 7
公式深度解析
第一部分:SUBTOTAL({9,4,5}, B3:J3)
' 一次性计算三个统计值 9 → 求和(SUM) 4 → 最大值(MAX) 5 → 最小值(MIN)
' 结果返回一个数组,例如: {84.55, 9.89, 8.08}
第二部分:数组运算
' {84.55, 9.89, 8.08} * {1, -1, -1} = {84.55, -9.89, -8.08}
第三部分:计算总分
' SUM({84.55, -9.89, -8.08}) = 84.55 - 9.89 - 8.08 = 66.58
第四部分:计算平均分
' 66.58 ÷ 7(9个评委去掉2个) = 9.5114
公式简化为:
= (SUBTOTAL(9, B3:J3) - SUBTOTAL(4, B3:J3) - SUBTOTAL(5, B3:J3)) / 7
视频演示:
四、高级应用技巧
技巧1:动态统计筛选后的数据
' 筛选后统计销售总额 =SUBTOTAL(109, 销售额区域)
' 筛选后统计可见行数量 =SUBTOTAL(103, 数据区域)
技巧2:多层分类汇总
' 创建多层次汇总报告 =SUBTOTAL(9, 区域1) ' 小计1 =SUBTOTAL(9, 区域2) ' 小计2 =SUBTOTAL(9, 区域1, 区域2) ' 总计(自动忽略小计值)
技巧3:结合条件格式
' 标记筛选后高于平均值的数据 =AND( SUBTOTAL(3, $A$2:A2) > 0, ' 判断是否可见 B2 > SUBTOTAL(1, $B$2:$B$100) )
五、常见问题与解决方案
Q1:为什么SUBTOTAL返回#VALUE!错误?
原因:引用了三维引用(如Sheet1:Sheet3!A1:A10)解决:改为单工作表引用或使用多个SUBTOTAL函数
Q2:如何对水平区域使用?
限制:SUBTOTAL不支持水平区域隐藏列的忽略替代方案:使用AGGREGATE函数或垂直排列数据
Q3:包含隐藏值与忽略隐藏值的区别?
' 包含隐藏值(1-11): =SUBTOTAL(2, A1:A10) ' 统计所有行(包括手动隐藏)
' 忽略隐藏值(101-111): =SUBTOTAL(102, A1:A10) ' 只统计可见行
Q4:SUBTOTAL与SUM的区别?
六、实际工作应用场景
场景1:销售报表动态统计
' A列:产品名称,B列:销售额 ' 筛选不同产品类别后:
' 可见产品数量 =SUBTOTAL(103, A2:A100)
' 可见产品销售额总和 =SUBTOTAL(109, B2:B100)
' 可见产品平均销售额 =SUBTOTAL(101, B2:B100)
场景2:学生成绩分析
' 筛选特定班级后:
' 班级人数 =SUBTOTAL(102, 成绩区域)
' 班级平均分(去掉缺考) =SUBTOTAL(101, FILTER(成绩区域, 成绩区域<>"缺考"))
' 班级最高分 =SUBTOTAL(104, 成绩区域)
场景3:库存管理
' 筛选特定仓库后:
' 库存种类数 =SUBTOTAL(103, 产品名称区域)
' 总库存价值 =SUBTOTAL(109, 价值区域)
' 预警:低库存产品数量 =SUBTOTAL(102, FILTER(产品区域, 库存数量<安全库存))
七、性能优化建议
1.避免全列引用:
' 不推荐 =SUBTOTAL(9, A:A)
' 推荐 =SUBTOTAL(9, A1:A1000)
2.减少SUBTOTAL嵌套:
' 不推荐:多重嵌套 =SUBTOTAL(9, SUBTOTAL(9, 区域1), 区域2)
' 推荐:分开计算 =SUBTOTAL(9, 区域1) + SUBTOTAL(9, 区域2)
3.合理使用function_num:
筛选场景:使用101-111系列
需要包含隐藏值:使用1-11系列
仅计数:103比102更通用(统计非空单元格)
八、总结
SUBTOTAL函数是Excel中最强大的统计函数之一,它的核心价值体现在:
主要优势:
动态响应筛选:自动适应数据筛选状态
智能统计:可选择包含或忽略隐藏值
避免重复计算:自动识别并忽略嵌套汇总
多功能集成:一个函数实现11种统计功能
使用心得:
序号生成:SUBTOTAL(103, ...)是最优雅的解决方案
筛选统计:SUBTOTAL是制作动态报表的利器
复杂计算:通过数组参数实现一键多统计
版本兼容性:
所有Excel版本均支持1-11系列
所有Excel版本均支持101-111系列
可作为跨版本兼容的解决方案
掌握了SUBTOTAL函数,你将能够创建更加智能、动态的数据分析报表,大大提高工作效率!
夜雨聆风