加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

按指定表名关键词,一键汇总分表数据

(2016-09-02 21:55:56)
标签:

杂谈

文:@EXCELers

之前和大家分享了一键汇总分表数据的VBA小代码。

网址链接:

之后有网友问能否不要一锅端,不要把所有的分表数据都汇总了,而是按条件汇总,比如说,只汇总表名里包含某个关键词的工作表?

今把之前的代码稍微修改了下,增加了表名关键词输入框,操作动画如下:

http://ww4/large/005IRek6gw1f7fbivi1psg30h10dckjm.gif

​如果依然想把所有的表格数据都汇总,则关键词输入框里,不做任何输入即可。


​动画中所用视频如下:

Sub collect()
    '新浪微博@EXCELers,一键多表数据汇总
    Dim sht As Worksheet, rng As Range, k&, trow&
    Application.ScreenUpdating = False
    '取消屏幕更新,加快代码运行速度
    temp = InputBox("请输入需要合并的工作表所包含的关键词:", "提醒")
    If StrPtr(temp) = 0 Then Exit Sub
    '如果点击了inputbox的取消或者关闭按钮,则退出程序
    trow = Val(InputBox("请输入标题的行数", "提醒"))
    If trow < 0 Then MsgBox "标题行数不能为负数。", 64, "警告": Exit Sub
    '取得用户输入的标题行数,如果为负数,退出程序
    Cells.ClearContents
    '清空当前表数据
    For Each sht In Worksheets
    '循环读取表格
        If sht.Name <> ActiveSheet.Name Then
        '如果表格名称不等于当前表名则……
            If InStr(1, sht.Name, temp, vbTextCompare) Then
           '如果表中包含关键词则进行汇总动作(不区分关键词字母大小写)
                Set rng = sht.UsedRange
                '定义rng为表格已用区域
                k = k 1
                '累计K值
                If k = 1 Then
                '如果是首个表格,则K为1,则把标题行一起复制到汇总表
                    rng.Copy
                    [a1].PasteSpecial Paste:=xlPasteValues
                Else
                    '否则,扣除标题行后再复制黏贴到总表,只黏贴数值
                    rng.Offset(trow).Copy
                    Cells(ActiveSheet.UsedRange.Rows.Count 1, 1).PasteSpecial Paste:=xlPasteValues
                End If
            End If
        End If
    Next
    [a1].Activate
    '激活A1单元格
    Application.ScreenUpdating = True
    '恢复屏幕刷新
End Sub


​示例文件下载:百度云盘示例下载

握手,明见。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有