有朋友发消息问能否用代码实现多表合并计算的功能。
嗯,先说下什么是“合并计算”。
它是Excel自带的一个功能,位于【数据】选项卡下的【数据工具】组中。
它的主要功能是根据指定的多个(单表或多表甚至多工作簿)单元格区域进行合并计算,一般常用于多表数据统计。
比如下面这个小动画,5秒即可搞定多表数据统计。
嘿~!是不是很简便很实用~
~我们现在的问题是,如何用VBA代码执行上面动画的操作过程,方便数据自动化处理。
代码如下:
Sub ConsolidateSheets()
'EH技术论坛公众号VBA编程学习与实践
Dim Sht As Worksheet
Dim r, k&, i&
ReDim r(1 To 1)
For Each Sht In Worksheets
'遍历工作表
If Sht.Name <> ActiveSheet.Name Then
k = k + 1
ReDim Preserve r(1 To k) '动态设置数组大小
r(k) = Sht.Name & "!" & Sht.UsedRange.Address(ReferenceStyle:=xlR1C1)
'数据区域地址以r1c1形式装入数组r
End If
Next
Cells.ClearContents '清除当前表数据
Range("a1").Consolidate sources:=r, Function:=xlSum, toprow:=True, leftcolumn:=True
'Consolidate合并计算语句,基于行列汇总,求和形式。
MsgBox "合并计算OK"
End Sub
小贴士:
1,代码将数据汇总到当前表中,因此在运行代码前,务必先激活放置汇总数据的表格。
2,在多表数据汇总合并的问题上,合并计算的优点是,它支持标题行乱序,甚至数量不一致的情况,例如一张表的标题行是语文、数学、英语,其它表的标题行为英语、语文、数学等,并不妨碍合并计算统计结果正确性。
3,但……合并计算要求标题行和列只能单行或单列。而且,除了指定的标题行和列以外的区域,均被视为统计区域,若其中含有文本,则忽略不统计。
致命的是第2点,这使得合并计算的功能大打折扣了,正因如此,该功能才鲜有人知吧。在VBA编程上,更多的时候,我们是通过ADO+SQL+字典做多表标题行乱序的数据统计。
最后附Consolidate方法的说明
Range.Consolidate(Sources, Function,TopRow, LeftColumn, CreateLinks)
The End
图文作者:看见星光
VBA编程学习与实践
易学宝微视频教程,1290个Office技巧精粹,每个技巧都与实际工作密切相关。轻松学习技巧,练就职场达人,淘宝搜索关键字:ExcelHome易学宝
本公众号主页回复关键字 大礼包 ,获取50集精彩微视频教程。