Notifications
Clear all

Juntar várias planilhas em uma só

15 Posts
6 Usuários
0 Reactions
3,130 Visualizações
(@krlosenri)
Posts: 7
Active Member
Topic starter
 

Bom dia,

Galera, estou com 1397 planilhas e preciso juntar todas em uma só, já procurei algumas macros, mas sempre aparecem alguns erros ou simplesmente não acontecem nada, tentei criando um .bat (type *.xlsx >> "nomedoarquivo".xlsx), mas só copia os dados da primeira planilha. Todas as planilhas tem o mesmo layout.

Tentei usar o macro abaixo e simplesmente não fez nada:

Sub Importar_XLS()

Dim sPath As String, sName As String, fName As String
Dim r As Long, rTemp As Long
Dim shPadrao As Worksheet

'Para a macro executar mais rápido!
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With

'A planilha onde serão colados os dados
Set shPadrao = Sheets("Planilha1")

'O caminho onde as planilhas que serão lidas estao
sPath = "C:teste"

'Descubro o nome do primeiro arquivo a ser aberto
sName = Dir(sPath & "*.xl*")

'Faço o loop que le todos os arquivos
Do While sName <> ""

'Acha a ultima linha utilizada na planilha onde serao colados os dados
r = shPadrao.Cells(Rows.Count, "A").End(xlUp).Row - 1

'O caminho + o nome do arquivo a ser aberto
fName = sPath & sName

'Abro o workbook a ser lido
Workbooks.Open Filename:=fName, UpdateLinks:=False

'Descubro sua quantas linhas ele possui
rTemp = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

'Colo na planilha principal
ActiveWorkbook.ActiveSheet.Range("A1:AO" & rTemp).Copy shPadrao.Range("A" & r + 1)

'Fecho o arquivo já lido
ActiveWorkbook.Close SaveChanges:=False

ScapeB:

'Atualizo a variavel com funcao DIR() que acha o proximo arquivo nao processado
sName = Dir()

Loop

On Error GoTo 0

With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With

End Sub
 
Postado : 29/08/2016 8:58 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Boa tarde, krlosenri, seja bem vindo.

Analisando superficialmente seu código, ele deveria atender à sua demanda, só um detalhe estaria faltando: na linha onde está o caminho das planilhas que serão lidas, vc deve colocar a última barra do caminho, caso contrário ele tentará encontrar um arquivo chamado C:teste.xl* e não C:teste*.xl*.
Então tente só inserir a barra e testar. Onde está
"C:teste" altere para "C:teste"

Para uma melhor análise, seria interessante vc anexar um modelo de como são uma de suas milhares de planilhas (pode ser com dados fictícios), facilita bastante.

 
Postado : 29/08/2016 10:07 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa tarde!!

Use esse suplemento:
http://www.rondebruin.nl/win/addins/rdbmerge.htm

Att

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/08/2016 10:09 am
(@krlosenri)
Posts: 7
Active Member
Topic starter
 

Boa tarde, krlosenri, seja bem vindo.

Analisando superficialmente seu código, ele deveria atender à sua demanda, só um detalhe estaria faltando: na linha onde está o caminho das planilhas que serão lidas, vc deve colocar a última barra do caminho, caso contrário ele tentará encontrar um arquivo chamado C:teste.xl* e não C:teste*.xl*.
Então tente só inserir a barra e testar. Onde está
"C:teste" altere para "C:teste"

Para uma melhor análise, seria interessante vc anexar um modelo de como são uma de suas milhares de planilhas (pode ser com dados fictícios), facilita bastante.

Fiz o que falou e mesmo assim não resolveu, segue o modelo dos arquivos.

 
Postado : 29/08/2016 12:20 pm
(@krlosenri)
Posts: 7
Active Member
Topic starter
 

Boa tarde!!

Use esse suplemento:
http://www.rondebruin.nl/win/addins/rdbmerge.htm

Att

Alexandrevba, estou com dificuldade para encontrar o suplemento dentro do excel, fiz a instalação, mas não utilizar.

 
Postado : 29/08/2016 1:00 pm
(@risada)
Posts: 2
New Member
 

Olá krlosenri,
Fiz o teste com sua macro, fazendo a alteração sugerida pelo Edson e também retirando termo "-1" do comando a seguir:

'Acha a ultima linha utilizada na planilha onde serao colados os dados
r = shPadrao.Cells(Rows.Count, "A").End(xlUp).Row - 1

Outra questao, o nome da aba do seu arquivo modelo é Planilha 1 mesmo?
Aqui tambem alterei para o nome correspondente Plan 1 e funcionou perfeitamente

 
Postado : 29/08/2016 1:31 pm
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

É, o risada tem razão. Se retirar o -1 vai funcionar, só vai ficar alguns lixos que são devido a repetição dos cabeçalhos de coluna. Mas isso vc pode retirar tranquilamente depois, manualmente, usando o remover duplicata ou até usando uma classificação primeiro e simplesmente deletando as linhas excedentes prá não ter que ficar mexendo muito no código.

 
Postado : 29/08/2016 1:51 pm
(@krlosenri)
Posts: 7
Active Member
Topic starter
 

Olá krlosenri,
Fiz o teste com sua macro, fazendo a alteração sugerida pelo Edson e também retirando termo "-1" do comando a seguir:

'Acha a ultima linha utilizada na planilha onde serao colados os dados
r = shPadrao.Cells(Rows.Count, "A").End(xlUp).Row - 1

Outra questao, o nome da aba do seu arquivo modelo é Planilha 1 mesmo?
Aqui tambem alterei para o nome correspondente Plan 1 e funcionou perfeitamente

Fiz conforme orientado, mas mesmo assim a macro roda, mas não junta as planilhas e nem aparece algum erro.

Sub Importar_XLS()

Dim sPath As String, sName As String, fName As String
Dim r As Long, rTemp As Long
Dim shPadrao As Worksheet

'Para a macro executar mais rápido!
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With

'A planilha onde serão colados os dados
Set shPadrao = Sheets("Plan1")

'O caminho onde as planilhas que serão lidas estao
sPath = "C:teste*.xl*"

'Descubro o nome do primeiro arquivo a ser aberto
sName = Dir(sPath & "*.xl*")

'Faço o loop que le todos os arquivos
Do While sName <> ""

'Acha a ultima linha utilizada na planilha onde serao colados os dados
r = shPadrao.Cells(Rows.Count, "A").End(xlUp).Row

'O caminho + o nome do arquivo a ser aberto
fName = sPath & sName

'Abro o workbook a ser lido
Workbooks.Open Filename:=fName, UpdateLinks:=False

'Descubro sua quantas linhas ele possui
rTemp = ActiveWorkbook.ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

'Colo na planilha principal
ActiveWorkbook.ActiveSheet.Range("A1:AO" & rTemp).Copy shPadrao.Range("A" & r + 1)

'Fecho o arquivo já lido
ActiveWorkbook.Close SaveChanges:=False

ScapeB:

'Atualizo a variavel com funcao DIR() que acha o proximo arquivo nao processado
sName = Dir()

Loop

On Error GoTo 0

With Application
.ScreenUpdating = True
.DisplayAlerts = True
End With

End Sub
 
Postado : 29/08/2016 1:55 pm
(@risada)
Posts: 2
New Member
 

Você tentou também executar a macro passo a passo através do botao F8 para verificar onde está a falha?

 
Postado : 29/08/2016 2:07 pm
(@nelson-s)
Posts: 96
Trusted Member
 

Tanto a planilha padrão que recebe os dados importados quanto as planilhas dos arquivos *.xl* que serão importadas possuem linhas de títulos?

 
Postado : 29/08/2016 2:09 pm
(@krlosenri)
Posts: 7
Active Member
Topic starter
 

Você tentou também executar a macro passo a passo através do botao F8 para verificar onde está a falha?

Sim verifiquei e não apresenta erro.

 
Postado : 29/08/2016 2:19 pm
(@krlosenri)
Posts: 7
Active Member
Topic starter
 

Tanto a planilha padrão que recebe os dados importados quanto as planilhas dos arquivos *.xl* que serão importadas possuem linhas de títulos?

Sim, todos seguem o padrão.

 
Postado : 29/08/2016 2:22 pm
(@nelson-s)
Posts: 96
Trusted Member
 

Teste esta rotina.

 
Postado : 29/08/2016 9:44 pm
DJunqueira
(@djunqueira)
Posts: 772
Prominent Member
 

Uma forma muito tranquila de importar informação de qq número de planilhas é usando o Power Query / Nova Consulta.
Basta apontar p/ a pasta onde estão as planilhas, o nome delas não importa desde q estejam todas lá.
O resultado final e as etapas de importação estão na planilha anexa.

P/ usar o Power Query / Nova Consulta vc tem de ter a versão 2013 (ativando o Power Query) ou 2016 do Excel.
O Power Query é tão útil q vale a atualização da seu Office, mas se vc não quiser gastar nada então importe da mesma forma com o Power BI q é um novo programa gratuito da M$.
Teoricamente penso q vc tb poderia fazer essa importação com o Access.

A vantagem do Power Query / Nova Consulta ou do Power BI é q vc praticamente não digita nenhum código (digitei duas linhas).

P/ ver um exemplo no Youtube procure por:
"Excel Power Query #06: Import Multiple Excel Files From Folder Into One Excel Table or Data Model"

Ou vá ao endereço abaixo:
https://www.youtube.com/watch?v=a7E29H5ZUmE

Se sua dúvida foi respondida marque o tópico como RESOLVIDO usando o botão com marca verde.

 
Postado : 30/08/2016 1:52 am
(@krlosenri)
Posts: 7
Active Member
Topic starter
 

Valeu pela ajuda pessoal, consegui através do Power Query como foi sugerido pelo DJunqueira.

 
Postado : 30/08/2016 6:21 am