SUBTOTAL函数主要用于筛选和隐藏后的数据统计,其语法为
SUBTOTAL(function_num,ref1,…),
其中参数function_num用于指定要为分类汇总使用的函数,如求和、计数、求平均值等。
function_num参数值的具体含义如下表所示:

当function_num取1~11时,SUBTOTAL函数对筛选后的数据进行统计,包括手工隐藏的数据。
当function_num取101~111时,SUBTOTAL函数对可见的数据进行统计,忽略筛选掉的数据和手工隐藏的数据。
无论function_num取1~11还是101~111,SUBTOTAL函数均不统计筛选掉的数据,两个参数范围的区别在于是否统计手工隐藏的数据。
一、筛选后计数
如下图所示,A1:C11为各业务员销售额。要求计算筛选出的人数。

在F1单元格输入公式:=SUBTOTAL(3,$A$2:$A$11)
如下图所示,当未筛选数据时,SUBTOTAL函数返回值为“10”。

当筛选出“销售1部”的数据时,SUBTOTAL函数返回值为“4”。

二、筛选后求和
如下图所示,在F1单元格输入公式:=SUBTOTAL(9,$C$2:$C$11)
当未筛选数据时,SUBTOTAL函数返回值为“550”。

当筛选出“销售1部”数据时,SUBTOTAL函数返回值为“220”。

三、隐藏后计数
如下图所示,在F1单元格输入公式:=SUBTOTAL(103,$A$2:$A$11)
此时所有数据均未隐藏,SUBTOTAL函数返回值为“10”。

当隐藏第2、3行数据后,SUBTOTAL函数返回值为“8”,如下图所示。

四、隐藏后求和
如下图所示,在F1单元格输入公式:=SUBTOTAL(109,$C$2:$C$11)
此时所有数据均未隐藏,SUBTOTAL函数返回值为“550”。

当隐藏第2、3行数据后,SUBTOTAL函数返回值为“520”。

五、生成筛选后仍连续的序号
如下图所示,在A2单元格输入公式:=SUBTOTAL(103,$B$2:B2)*1
拖动填充柄向下复制公式,在A2:A11生成连续序号。

当筛选出“销售1部”时,序号仍保持连续,如下图所示:

六、对筛选后的数据进行条件计数
如下图所示,在C14单元格输入公式:
=SUMPRODUCT(($B$2:$B$11=B15)*(SUBTOTAL(2,OFFSET($C$2,ROW($C$2:$C$11)-2,0))))
拖动填充柄将公式向下复制至C16单元格。
当未筛选数据时,SUBTOTAL函数返回的是各部门的员工人数。

当筛选出“销售额>=50”的数据时,SUBTOTAL函数返回的是各部门销售额不低于
50的员工人数,

本例中,使用OFFSET函数作为SUBTOTAL函数ref1参数,确定C2:C11单元格是否被筛选出。
使用公式($B$2:$B$11=B15)判断是否为B15单元格的部门(即“销售1部”)。
使用SUMPRODUCT函数计算满足条件的单元格个数。