VBA 同じファイル名に基づいて複数のフォルダの Excel ファイルを 1 つのワークシートに結合する

VBA 同じファイル名に基づいて複数のフォルダの Excel ファイルを 1 つのワークシートに結合する

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

関連情報