VBA常用小代码:用【合并计算】汇总多表数据到总表

论坛 期权论坛 期权     
Word技巧达人   2019-6-9 21:27   3305   0
它是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)





欢迎朋友们分享办公技巧
投稿、提问邮箱:wordjqdr@126.com







分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:85
帖子:17
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP