VB合并excel表格(工作表和工作簿)

2 篇文章 0 订阅

作者:提姆葉yezhongli
链接:https://www.zhihu.com/question/298117231/answer/1240632641
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

关于表格合并,一般会有3种情况:
(p.s:请注意工作簿跟工作表的区别)

  • 将一个 Excel 工作簿中的多个工作表合并成一个工作表
  • 将多个 Excel 工作簿合并成一个工作簿
  • 将多个 Excel 工作簿的工作表合并成一个工作表
    下面分别根据3种情况进行详细的步骤说明,请读者根据自己的需要取用:

一、将一个 Excel 工作簿中的多个工作表合并成一个工作表

1、新建一个Excel工作薄,工作簿名称任你定义
。2、打开此工作薄,将其中一个Sheet重命名为"汇总"。
3、在其下任一个工作表标签上点击右键,选择“查看代码”。
4、在打开的VBA编辑窗口中粘贴以下代码:

Sub 合并工作簿内的多个Sheet到同一个Sheet()
Dim i, j As Integer 'i是数据源表的最后一行,j是目标表(数据表)的最后一行
Dim sht As Worksheet

Application.ScreenUpdating = False '关闭屏幕刷新
'先要删除所有数据
Sheets("汇总").Range("a1:z65536").ClearContents


'复制数据
For Each sht In Sheets
If sht.Name <> "汇总" Then
i = sht.Range("d65536").End(xlUp).Row
j = Sheets("汇总").Range("d65536").End(xlUp).Row
sht.Range("a1:z" & i).Copy Sheets("汇总").Range("a" & j + 1)
End If
Next
MsgBox "执行完毕!"
Application.ScreenUpdating = True '打开屏幕刷新
End Sub

5、关闭VBA编辑窗口。
6、在excel中,工具—宏---宏,选“合并工作簿的各个sheet到同一个sheet”,然后“执行”。
7、等待…ok!

二、将多个 Excel 工作簿合并成一个工作簿

1、新建一个工作薄,将其命名为你合并后的名字。
2、打开此工作薄。
3、在其下任一个工作表标签上点击右键,选择“查看代码”。
4、在打开的VBA编辑窗口中粘贴以下代码:

Sub 工作薄间工作表合并()
Dim FileOpen
Dim X As Integer
Application.ScreenUpdating = False
FileOpen = Application.GetOpenFilename(FileFilter:="Microsoft Excel文件(*.xls*),*.xls*", MultiSelect:=True, Title:="合并工作薄")
X = 1
While X <= UBound(FileOpen)
Workbooks.Open Filename:=FileOpen(X)
Sheets().Move After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
X = X + 1
Wend
ExitHandler:
Application.ScreenUpdating = True
Exit Sub


errhandler:
MsgBox Err.Description
End Sub

5 关闭VBA编辑窗口。
6、在excel中,工具—宏---宏,选“工作薄间工作表合并”,然后“执行”。
7、在打开的对话窗口中,选择你要合并的300个工作薄。
8、等待…ok!

三、将多个 Excel 工作簿的工作表合并成一个工作表

1、新建一个Excel工作薄,工作簿名称任你定义。
2、打开此工作薄,将其中一个Sheet重命名为"汇总"。
3、在其下任一个工作表标签上点击右键,选择“查看代码”。
4、在打开的VBA编辑窗口中粘贴以下代码:

Sub 多文件合并能够自由选择文件夹()
Dim arr()
Dim wb As Workbook
Dim sht As Worksheet
arr = Application.GetOpenFilename("Excel文件,*.xls*", 2, , , True)

Application.ScreenUpdating = False '关闭屏幕刷新

If arr(1) <> "False" Then

For i = LBound(arr) To UBound(arr)
Set wb = Workbooks.Open(arr(i))
For Each sht In wb.Sheets


'以下4行是壳内的命令,用于复制打开的工作簿
If InStr(sht.Name, "费用") > 0 Then
irow = sht.Range("A65536").End(xlUp).Row
irow1 = ThisWorkbook.Sheets("汇总").Range("A65536").End(xlUp).Row + 1
sht.Range("a1:z" & irow).Copy ThisWorkbook.Sheets("汇总").Range("a" & irow1)
wb.Close False '关闭工作簿并且不保存
End If
Next
Next
End If

MsgBox "执行完毕!"
Application.ScreenUpdating = True '打开屏幕刷新

End Sub

5、指定要合并的Sheet。对“If InStr(sht.Name, “费用”) > 0 Then”这段代码中的"费用"修改,比如修改成"经销商",则包含“经销商”几个文字的都会纳入合并
6、关闭VBA编辑窗口。
7、在excel中,工具—宏---宏,选“多文件合并能够自由选择文件夹”,然后“执行”。
8、在打开的对话窗口中,选择你要合并的几个工作薄文件。
9、等待。。。。ok!

  • 12
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值