乐于分享
好东西不私藏

8.4 Excel SUBTOTAL函数完全指南:从基础到高级应用

8.4 Excel SUBTOTAL函数完全指南:从基础到高级应用

掌握SUBTOTAL函数的双重功能,轻松应对筛选统计与动态计算!

一、SUBTOTAL函数基础介绍

函数语法

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

参数详解

  • function_num:指定使用何种函数进行分类汇总计算

    • 1-11:包含隐藏值的计算

    • 101-111:忽略隐藏值的计算

  • ref1, ref2, ...:要计算的一个或多个单元格区域

核心特性

  1. 忽略嵌套分类汇总:避免重复计算

  2. 智能处理隐藏行:通过function_num决定是否包含隐藏值

  3. 响应筛选状态:自动忽略筛选掉的行

  4. 垂直区域专用:适用于数据列,不适用于数据行

二、Function_num参数对照表

包含隐藏值
忽略隐藏值
对应函数
功能说明
1
101
AVERAGE
平均值
2
102
COUNT
数值计数
3
103
COUNTA
非空单元格计数
4
104
MAX
最大值
5
105
MIN
最小值
6
106
PRODUCT
乘积
7
107
STDEV
样本标准偏差
8
108
STDEVP
总体标准偏差
9
109
SUM
求和
10
110
VAR
样本方差
11
111
VARP
总体方差

三、实战案例精讲

案例1:智能序号生成(筛选后序号连续)

应用场景

在数据表中,使用常规序号在筛选后会出现序号断层。SUBTOTAL函数可以创建动态连续的序号。

数据准备

解决方案

=SUBTOTAL(103, $B$3:B3)

公式解析

  1. function_num = 103:使用COUNTA函数,且忽略隐藏值

  2. $B$3:B3:

    • $B$3:固定起始单元格(绝对引用)

    • B3:相对引用,随公式下拉而变化

    • 范围从B3开始,到当前行结束

  3. 实现原理:

    • 计算从第一行到当前行非空单元格的数量

    • 筛选时隐藏的行会被忽略

    • 始终保持序号连续

效果演示

  • 筛选前: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的区别?

特性
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中最强大的统计函数之一,它的核心价值体现在:

主要优势:

  1. 动态响应筛选:自动适应数据筛选状态

  2. 智能统计:可选择包含或忽略隐藏值

  3. 避免重复计算:自动识别并忽略嵌套汇总

  4. 多功能集成:一个函数实现11种统计功能

使用心得:

  • 序号生成:SUBTOTAL(103, ...)是最优雅的解决方案

  • 筛选统计:SUBTOTAL是制作动态报表的利器

  • 复杂计算:通过数组参数实现一键多统计

版本兼容性:

  • 所有Excel版本均支持1-11系列

  • 所有Excel版本均支持101-111系列

  • 可作为跨版本兼容的解决方案

掌握了SUBTOTAL函数,你将能够创建更加智能、动态的数据分析报表,大大提高工作效率!

相关学习资料