VBA: Combine arquivos Excel de várias pastas em uma planilha com base nos mesmos 4 primeiros caracteres no nome do arquivo.xlsx
Descrição:
Existem arquivos com ID de cliente de 001 a 100. Cada cliente possui 3 relatórios Excel diferentes (### Relatório1-3), que são gerados em pastas diferentes (Pastas1-3).
Por exemplo: A pasta 1 terá:
001 Report1.xlsx
...
100 Report1.xlsx
A pasta 2 terá:
001 Report2.xlsx
...
100 Report2.xlsx
A pasta 3 terá:
001 Report3.xlsx
...
100 Report3.xlsx
Cada um desses arquivos contém apenas uma planilha com Valores (sem fórmulas nem tabelas dinâmicas). Cada Relatório 1, Relatório 2, Relatório 3 possui um conjunto diferente de colunas/linhas.
Pergunta:
Gostaria de criar uma pasta de trabalho para cada ID de cliente "###" e ter os relatórios como planilhas (### Relatório1) (### Relatório 2) (### Relatório 3) (Todos os documentos desejados a serem combinados em uma pasta de trabalho terá os primeiros quatro caracteres no início do nome de cada relatório)
Por exemplo, para Cliente: 001
Crie uma pasta de trabalho "001 AllReports.xlsx" que tenha:
Folha 1 = 001 Relatório1
Folha 2 = 001 Relatório2
Folha 3 = 001 Relatório3
Em seguida, vá para o ID do cliente 002 e faça o mesmo.
Por favor, deixe-me saber se mais alguma coisa precisa ser esclarecida. Obrigado, eu realmente aprecio isso!
Algumas notas/pensamentos:
Eu estava pensando em criar um modelo de macro de fusão que possui 3 campos. Onde preencho os caminhos da Pasta 1, depois da Pasta 2 e da Pasta 3 e, em seguida, prossigo para mesclar os documentos com base no ID do Cliente.
Para mesclar arquivos básicos antes de eu me basear em: https://docs.microsoft.com/en-us/office/vba/api/excel.worksheet.copy
Também fiquei curioso em fazer isso com uma consulta, mas como as colunas não são consistentes no Relatório1-3, não tenho certeza se seria uma opção.
Este exemplo/VBA é bom se todos os arquivos estiverem na mesma pasta: seria ótimo adicionar os diferentes caminhos de pasta e baseá-los nos nomes que contêm o ID do 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