VBA Combina archivos de Excel de varias carpetas en una hoja de trabajo basándose en tener el mismo nombre de archivo

VBA Combina archivos de Excel de varias carpetas en una hoja de trabajo basándose en tener el mismo nombre de archivo

VBA: combine archivos de Excel de varias carpetas en una hoja de trabajo basándose en tener los mismos 4 primeros caracteres en el nombre del archivo.xlsx


Descripción:

Hay archivos con un ID de cliente del 001 al 100. Cada cliente tiene 3 informes de Excel diferentes (### Informe1-3), que se generan en diferentes carpetas (Carpetas1-3).

Por ejemplo: La carpeta 1 tendrá:
001 Report1.xlsx
...
100 Report1.xlsx

La carpeta 2 tendrá:
001 Report2.xlsx
...
100 Report2.xlsx

La carpeta 3 tendrá:
001 Report3.xlsx
...
100 Report3.xlsx

Cada uno de estos archivos contiene solo una hoja con Valores (sin fórmulas ni tablas dinámicas). Cada Informe 1, Informe 2, Informe 3 tiene un conjunto diferente de columnas/filas.


Pregunta:

Me gustaría crear un libro de trabajo para cada ID de cliente "###" y tener los informes como Hojas (### Informe1) (### Informe 2) (### Informe 3) (Todos los documentos deseados se combinarán en un libro de trabajo tendrá los primeros cuatro caracteres al principio del nombre de cada informe)

Por ejemplo, para Cliente: 001
Cree un libro de trabajo "001 AllReports.xlsx" que tenga:
Hoja 1 = 001 Informe1
Hoja 2 = 001 Informe2
Hoja 3 = 001 Informe3

Luego pase al ID de cliente 002 y haga lo mismo.

Por favor, avíseme si es necesario aclarar algo más. ¡Gracias, realmente lo aprecio!


Algunas notas/pensamientos:

Estaba pensando en crear una plantilla de macro de fusión que tenga 3 campos. Donde completo las rutas de la Carpeta 1, luego la Carpeta 2 y la Carpeta 3 y luego procedo a fusionar los documentos según la ID del cliente.

Para fusionar archivos básicos antes me basaba en: https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.copy

También tenía curiosidad por hacerlo con una consulta, pero como las columnas no son consistentes en el Informe 1-3, no estoy seguro de si sería siquiera una opción.

Este ejemplo/VBA es bueno si todos los archivos están en la misma carpeta: sería fantástico agregar las diferentes rutas de las carpetas y basarlas en los nombres que contienen el ID del cliente ###.

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

información relacionada