VBA:根据文件名中前 4 个字符的相同性,将多个文件夹中的 Excel 文件合并到一张工作表中。xlsx
描述:
有客户 ID 从 001 到 100 的文件。每个客户有 3 个不同的 Excel 报告(###Report1-3),这些报告生成到不同的文件夹(Folders1-3)中。
例如:文件夹 1 将包含:
001 Report1.xlsx
...
100 Report1.xlsx
文件夹 2 将包含:
001 Report2.xlsx
...
100 Report2.xlsx
文件夹 3 将包含:
001 Report3.xlsx
...
100 Report3.xlsx
这些文件中的每一个都只包含一个带有值的工作表(没有公式或数据透视表)。每个报告 1、报告 2、报告 3 都有一组不同的列/行。
问题:
我想为每个客户 ID“###”创建一个工作簿,并将报告作为工作表(### 报告 1)(### 报告 2)(### 报告 3)(要合并到一个工作簿中的所有所需文档都将在每个报告名称的开头包含前四个字符)
例如,对于客户:001,
创建一个“001 AllReports.xlsx”工作簿,其中包含:
工作表 1 = 001 Report1
工作表 2 = 001 Report2
工作表 3 = 001 Report3
然后移动到客户 ID 002 并执行相同操作。
如果还有什么需要澄清的,请告诉我。谢谢,我真的很感激!
一些注释/想法:
我正在考虑创建一个包含 3 个字段的合并宏模板。我在其中填写文件夹 1、文件夹 2 和文件夹 3 路径,然后根据客户 ID 继续合并文档。
合并之前我所依据的基本文件为: https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.copy
我也很好奇通过查询来做到这一点,但由于 Report1-3 中的列不一致,我不确定这是否是一种选择。
如果所有文件都在同一个文件夹中,则此示例/VBA 很好:添加不同的文件夹路径并根据包含客户 ID ### 的名称为基础会很好。
Sub ConslidateWorkbooks()
'Created by Sumit Bansal from https://trumpexcel.com
Dim FolderPath As String
Dim Filename As String
Dim Sheet As Worksheet
Application.ScreenUpdating = False
FolderPath = Environ("userprofile") & "\Desktop\Test\"
Filename = Dir(FolderPath & "*.xls*")
Do While Filename <> ""
Workbooks.Open Filename:=FolderPath & Filename, ReadOnly:=True
For Each Sheet In ActiveWorkbook.Sheets
Sheet.Copy After:=ThisWorkbook.Sheets(1)
Next Sheet
Workbooks(Filename).Close
Filename = Dir()
Loop
Application.ScreenUpdating = True
End Sub