【VBA案例020】整合工作簿

大家好!今天回答一位粉丝朋友的提问。

问题是:将多个工作簿中的所有工作表合并汇总,要求名称相同的工作表内容要合并在一起,名称不同的要单独作为一个工作表。

为此,我模拟了一份数据,结构如下图:

这个问题,其实是我之前分享的【案例011合并工作表】和【案例013汇总工作簿】的融合版。方法非常的相似。其实对于工作簿和工作表的合并与拆分的操作,之前的案例基本都分享完了。只要融会贯通,举一反三,相信这种问题将迎刃而解。

效果就不演示了,以下是VBA代码。详细解析请看文末的视频。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Option Explicit

Sub 汇总合并工作簿()
Dim shtName
Dim sht As Worksheet

For Each sht In ThisWorkbook.Worksheets
shtName = shtName & "," & sht.Name
Next

Dim filePath$, fileName As String

filePath = ThisWorkbook.Path & "\文件夹\"
fileName = Dir(filePath & "*.xlsx")

Dim row_count, thisRow_count
Application.ScreenUpdating = False
Do While fileName <> ""
With Workbooks.Open(filePath & fileName)
For Each sht In .Worksheets
If InStr("," & shtName & ",", "," & sht.Name & ",") > 0 Then
row_count = sht.[a65536].End(3).Row
thisRow_count = ThisWorkbook.Worksheets(sht.Name).[a65536].End(3).Row
sht.Range("a2:e" & row_count).Copy ThisWorkbook.Worksheets(sht.Name).Range("a" & thisRow_count + 1)
Else
sht.Copy after:=ThisWorkbook.Worksheets(ThisWorkbook.Worksheets.Count)
shtName = shtName & "," & sht.Name
End If
Next
.Close False
End With
fileName = Dir
Loop
Application.ScreenUpdating = True

End Sub

原始链接


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 richffan@outlook.com

文章标题:【VBA案例020】整合工作簿

字数:367

本文作者:Rich Fan

发布时间:2023-10-23, 00:00:00

最后更新:2024-02-27, 08:17:39

原始链接:http://fanrich.github.io/2023/10/22/VBA/VBA%E6%A1%88%E5%88%97/%E3%80%90VBA%E6%A1%88%E4%BE%8B020%E3%80%91%E6%95%B4%E5%90%88%E5%B7%A5%E4%BD%9C%E7%B0%BF/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。