文:@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
示例文件下载:百度云盘示例下载
握手,明见。
加载中,请稍候......