如何用VBA借助【合并计算】汇总多表数据?

别怕,Excel VBA其实很简单(第2版)

作者:dangdang

当当

哈罗,我是星光。

有朋友发消息问能否用代码实现多表合并计算的功能,刚好很多年前写过一篇……

嗯,先说下什么是“合并计算”。

它是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)
(0)

相关推荐