subtotal对筛选后的数据进行条件求和,不重复值计数

-01-

筛选后求和

下图左表是数据源,现在的要求是对筛选后的考核成绩求总和。对筛选后的数据汇总,基本都是用subtotal函数。只需在F2单元格中输入公式=SUBTOTAL(9,D3:D15)即可。

subtotal是个分类汇总函数,它可以忽略筛选后的隐藏行,只对可见单元格进行数据汇总。汇总的方式有很多种,比如求和,求最大,求最小等,其中9代表的就是求和。

SUBTOTAL(9,D3:D15)这个公式的意思就是,对D3:D15中的可见单元格求和。


-02-

筛选后条件求和

上一题是筛选后直接求和,现在的要求是对筛选后销售部的考核成绩求总和。销售部的数据已经用颜色标出,效果如动图所示。

对于这个问题,我们可以先用辅助列来完成。首先,把之前的条件筛选清除,恢复到还未筛选的状态。然后在E列添加辅助列,E2单元格输入公式=SUBTOTAL(3,C3),下拉填充,现在得到的结果都是1。

SUBTOTAL(3,C3)这个公式是对一个单元格非空计数,3相当于counta。如果这个单元格所在的行未隐藏,结果就是1。如果所在的行隐藏,结果就是0,因为subtotal不对筛选后隐藏的单元格计数。

接下来,在G2单元格输入公式=SUMPRODUCT((C3:C15="销售部")*E3:E15*D3:D15),就可以了。这个公式的意思是,在C列的单元格中,既是销售部,同时所在的行又是可见行的,返回对应的成绩;不同时满足这2个条件的返回0。最后用sumproduct求和。
不用辅助列的公式如下:

=SUMPRODUCT(SUBTOTAL(3,OFFSET(C2,ROW(1:13),))*(C3:C15="销售部")*D3:D15)


-03-

筛选后不重复值计数

现在的要求是计算筛选后不重复部门的个数,并把不重复部门罗列出来。从下图中可以看到不重复的部门只有3个,分别是生产部、人事部和销售部。

这2个问题用函数来做都很复杂,我这里只提供公式,不做解释。不重复个数的公式为:

=COUNT(0/FREQUENCY(ROW(A:A),SUBTOTAL(3,OFFSET(C2,ROW(1:13),))*MATCH(C3:C15,C3:C15,)))-1

不重复部门的公式为:

=LOOKUP(,0/FREQUENCY(1,SUBTOTAL(3,OFFSET(C$2,ROW($1:$13),))*ISNA(MATCH(C$3:C$15,C$17:C17,))),C$3:C4)&""

这个问题用vba代码来做却不怎么难。
代码如下:
(0)

相关推荐