您的位置:首页 > 编程语言 > VB

在EXCEL中实现对数据的过滤统计

2009-06-02 18:42 246 查看
      在EXCEL中对数据进行汇总统计是工作中经常会使用的,不过通常的汇总统计是针对一行或一列中的所有数据进行的,此时通过统计函数可以方便简单地完成对数据的汇总统计工作。但是,有时候也会需要先对数据进行过滤,然后再对过滤后的数据进行统计。

     例如有如下数据:

 


如果我们需要计算所有人的成绩的平均值,使用AVERAGE(C2:C5)就很容易计算出结果,但是,如果我们需要分别计算男生或女生的平均分如何来实现呢?
方案一:使用SUBTOTAL函数
SUBTOTAL函数可以返回列表或数据库中的分类汇总,其语法形式如下:
 
SUBTOTAL(function_num, ref1, ref2, ...)
 
它的第一个参数function_num为 1 到 11(包含隐藏值)或 101 到 111(忽略隐藏值)之间的数字,指定使用何种函数在列表中进行分类汇总计算。而这些数值的含义如下表所示:
 

Function_num
(包含隐藏值)
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
 
那么我们可以使用SUBTOTAL(1,C2:C5)或SUBTOTAL(101,C2:C5)的形式来统计C2到C5之间数据的平均值了。在不隐藏任何行的情况下,这两种形式的调用得到的结果与AVERAGE(C2:C5)是完全一样的。根据SUBTOTAL函数的说明,当这些数据中有隐藏数据时,其结果应当有所不同。
我们将第4行的数据隐藏,然后可以看到SUBTOTAL(1,C2:C5)的结果为依然为86.75,而SUBTOTAL(101,C2:C5)的结果为83.33333。也就是说,SUBTOTAL的第一个参数是101时不再考虑隐藏的数据。
 


 
然而,对于上例,我们需要的是统计男生或女生的平均分,为了达到目的,当然可以在计算男生平均分时将所有女生的信息隐藏,但是在数据量比较大时,隐藏女生数据将成为比较烦琐的工作,而且,在需要计算男生平均分时还需要取消女生信息的隐藏。
通常我们是使用数据的筛选功能快速筛选数据,但是使用筛选过滤掉的数据并没有被隐藏,那么它对SUBTOTAL函数又会带来什么影响呢?筛选男生后的数据及SUBTOTAL(1,C2:C5)与SUBTOTAL(101,C2:C5)的结果如下:
 



通过结果可以看出,显然SUBTOTAL在计算时只计算了过滤后显示出来的数据,而这正是我们的想要的结果。
方案二:使用VBA脚本
VBA提供了在OFFICE中的编程能力,因此使用VBA可以实现很多通常会认为难以完成的任务,对于本例,可以编写以下VBA脚本:
Public Sub test()
    Dim i As Integer
    Dim c As Integer
    Dim s As Double
    c = 0
    s = 0
    For i = 2 To 5
        If Sheet1.Range("B" & CStr(i)).Value = "男" Then
            s = s + Sheet1.Range("C" & CStr(i)).Value
            c = c + 1
        End If
    Next
   
    Sheet1.Range("B13") = "VBA结果:"
    Sheet1.Range("C13") = Round(s / c, 2)
End Sub
脚本编写完成后运行之,可以在EXCEL当前SHEET页的C13单元格处看到统计结果。
用过一段时间VBA以后,发现以前总想以程序员的角度写一个小软件完成的很多功能实际上直接通过VBA就可以方便完成,从办公的角度,VBA还真是一个高效的工具。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息