VBA实战技巧精粹018:如何汇总数据
2011-04-29 19:52
316 查看
以前从没在Excel中利用VBA汇总过数据,其实在Excel中也几乎没有汇总过数据,主要要是因为很多时候汇总还不如直接计算来的直接。既然看到这儿了,就把汇总数据好好学习一下吧。
根据实际情况一般而言,需要汇总的数据源有两种:①在同一工作簿中的所有工作表或指定工作表;②不同工作簿中的指定工作表(这种情况下往往不会是所有工作簿中的所有工作表)。下面分情况解决:
①在同一工作簿中的所有工作表的汇总:
先解决可以进行的汇总操作:
xlAverage 计算平均值
xlCount 计数
xlCountNums 数值计数
xlMax 最大值
xlMin 最小值
xlProduct 乘积
xlStDev 标准偏差
xlStDevP 总体标准偏差
xlSum 求和
xlVar 方差
xlVarP 总体方差
其中红色部分是为比较常用的,下面看一个示例:
目的是想把每个人在一月、二月、三月的各项业务量汇总求和到新工作表(汇总表)中。
对一月、二月、三月中的人名不作要求,可以不尽相同,也并不一定非得是只有3项业务,也可以业务4、业务5等等,这些都可以包括在内。
代码:
Sub ConsolidateDemo()
Dim Arr As Variant
Arr = Array("一月!R1C1:R5C4", "二月!R1C1:R6C5", "三月!R1C1:R5C4")
With Worksheets("汇总").Range("A1")
.Consolidate Sources:=Arr, Function:=xlSum, _
TopRow:=True, LeftColumn:=True
.Value = "姓名"
End With
End Sub
上面的代码中,首先定义一个数组,利用数组函数Array来给数组Arr赋值,然后在汇总工作表中的A1单元格填充汇总数据,来源是数组Arr的元素,要进行的汇总操作函数是xlSum求和,基于顶端行的列标题进行计算,基于左边列的行标题进行计算,这与实际情况也一致。
代码还可以进行进一步的简化,由于这些工作表都是存在于同一工作簿中,所以完全省略Sources参数,这样默认就是对当前工作簿中的其他工作表的A1单元格的当的区域进行汇总。
因为Consolidate方法同时基于行列汇总时将忽略区域左上角的内容,所以需要另外添加代码为左上角单元格赋值。
Sub ConsolidateDemo2()
Dim Arr As Variant
With Worksheets("汇总").Range("A1")
.Consolidate Function:=xlSum, _
TopRow:=True, LeftColumn:=True
.Value = "姓名"
End With
End Sub
这段代码有用吗?有,用处非常大,比如在进行评比时,经常是分组分项对选手进行打分,这时评委手中拿到的都是针对所有选手或部分选手,而打分的项目往往是不同的,这时就可以利用这段代码对所有原始评分表进行汇总,然后再进行处理。
43 Things: Excel VBA
BuzzNet: Excel VBA
del.icio.us: Excel VBA
Flickr: Excel VBA
IceRocket: Excel VBA
LiveJournal: Excel VBA
Technorati: Excel VBA
菊子曰:专业的博客管理软件
根据实际情况一般而言,需要汇总的数据源有两种:①在同一工作簿中的所有工作表或指定工作表;②不同工作簿中的指定工作表(这种情况下往往不会是所有工作簿中的所有工作表)。下面分情况解决:
①在同一工作簿中的所有工作表的汇总:
先解决可以进行的汇总操作:
xlAverage 计算平均值
xlCount 计数
xlCountNums 数值计数
xlMax 最大值
xlMin 最小值
xlProduct 乘积
xlStDev 标准偏差
xlStDevP 总体标准偏差
xlSum 求和
xlVar 方差
xlVarP 总体方差
其中红色部分是为比较常用的,下面看一个示例:
目的是想把每个人在一月、二月、三月的各项业务量汇总求和到新工作表(汇总表)中。
对一月、二月、三月中的人名不作要求,可以不尽相同,也并不一定非得是只有3项业务,也可以业务4、业务5等等,这些都可以包括在内。
代码:
Sub ConsolidateDemo()
Dim Arr As Variant
Arr = Array("一月!R1C1:R5C4", "二月!R1C1:R6C5", "三月!R1C1:R5C4")
With Worksheets("汇总").Range("A1")
.Consolidate Sources:=Arr, Function:=xlSum, _
TopRow:=True, LeftColumn:=True
.Value = "姓名"
End With
End Sub
上面的代码中,首先定义一个数组,利用数组函数Array来给数组Arr赋值,然后在汇总工作表中的A1单元格填充汇总数据,来源是数组Arr的元素,要进行的汇总操作函数是xlSum求和,基于顶端行的列标题进行计算,基于左边列的行标题进行计算,这与实际情况也一致。
代码还可以进行进一步的简化,由于这些工作表都是存在于同一工作簿中,所以完全省略Sources参数,这样默认就是对当前工作簿中的其他工作表的A1单元格的当的区域进行汇总。
因为Consolidate方法同时基于行列汇总时将忽略区域左上角的内容,所以需要另外添加代码为左上角单元格赋值。
Sub ConsolidateDemo2()
Dim Arr As Variant
With Worksheets("汇总").Range("A1")
.Consolidate Function:=xlSum, _
TopRow:=True, LeftColumn:=True
.Value = "姓名"
End With
End Sub
这段代码有用吗?有,用处非常大,比如在进行评比时,经常是分组分项对选手进行打分,这时评委手中拿到的都是针对所有选手或部分选手,而打分的项目往往是不同的,这时就可以利用这段代码对所有原始评分表进行汇总,然后再进行处理。
43 Things: Excel VBA
BuzzNet: Excel VBA
del.icio.us: Excel VBA
Flickr: Excel VBA
IceRocket: Excel VBA
LiveJournal: Excel VBA
Technorati: Excel VBA
菊子曰:专业的博客管理软件
相关文章推荐
- VBA实战技巧精粹002:如何调用过程
- VBA实战技巧精粹010:如何快速选定工作表及Option Base 1
- VBA实战技巧精粹017:如何快速删除空白单元格所在的行
- VBA实战技巧精粹016:关于Find方法解决如何由前向后及由后往前的查找与替换
- VBA实战技巧精粹019:如何快速填充考场号及座号
- VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法
- VBA实战技巧精粹003:在宏代码中使用工作表的四种方法
- VBA实战技巧精粹013:宏代码保存工作簿的3种方法
- VBA实战技巧精粹004:在工作簿中添加新工作表
- VBA实战技巧精粹011:新建只有1张工作表的工作簿
- VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法
- Python 高效编程技巧实战(2-1)如何在列表,字典, 集合中根据条件筛选数据
- VBA实践技巧精粹005:如何不显示警告信息
- VBA技巧精粹020-如何统计选择题所有可能选项所占百分比(含正答率)
- VBA实战技巧精粹014:关于Range总结
- VBA实践技巧精粹007:如何判断工作表为空并删除
- VBA实践技巧精粹008:如何判断指定工作表是否存在
- VBA实战技巧精粹015:关于Split函数的一些认识
- VBA实战技巧精粹001:关于高级筛选功能的学习及VBA实现
- [Big Data - Codis, Mycat(cobar)] 企业互联网+转型实战:如何进行PB级别数据的架构变迁