VBA:基於檔案名稱中具有相同的前 4 個字符,將多個資料夾中的 Excel 檔案合併到一個工作表中。
描述:
存在客戶 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 報告 1
工作表 2 = 001 報告 2
工作表 3 = 001 報告 3
然後移至客戶 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