VBA: ファイル名の最初の 4 文字が同じである複数のフォルダーの Excel ファイルを 1 つのワークシートに結合します。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 つだけ含まれています。レポート 1、レポート 2、レポート 3 にはそれぞれ異なる列/行のセットがあります。
質問:
顧客 ID「###」ごとに 1 つのワークブックを作成し、レポートをシート (### レポート 1) (### レポート 2) (### レポート 3) として作成します (1 つのワークブックに結合するすべての必要なドキュメントには、各レポートの名前の先頭に最初の 4 文字が含まれます)
たとえば、顧客: 001 の場合、
次の内容を含む「001 AllReports.xlsx」ワークブックを 1 つ作成します:
シート 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