Notifications
Clear all

Dividir planilha em vários arquivos por quantidade de linhas

12 Posts
5 Usuários
0 Reactions
2,821 Visualizações
(@bgoliveira)
Posts: 5
Active Member
Topic starter
 

Olá,

Gostaria de saber se é possível via macro, dividir uma planilha com 61mil linhas em várias outras planilhas (outros arquivos) com 3000 linhas cada.

No caso, a planilha possui as colunas, a primeira linha com o cabeçalho e as demais com conteúdo. Eu precisaria de gerar novos arquivos, contendo na primeira linha o mesmo cabeçalho e 3mil linhas de conteúdo.
No exemplo informado, com 61mil linhas no arquivo original, ficaria no final com 20 arquivos.

Seria possível algo dessa forma? Se sim, alguem poderia me ajudar como fazer, ou informar um script vba que funcione dessa forma?

A B C D
Nome Nome Nome Nome
1 1 1 1
2 2 2 2

 
Postado : 06/04/2017 6:14 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Oliveira,

Sim é possível.

Veja o código que está no módulo1 do arquivo em anexo.

Gerei uma tabela com alguns números aleatórios para o exemplo. Primeiro a macro vai pegar o número de linhas e descobrir
quantos arquivos serão necessário, depois vai copiar a área com os valores para a planilha chamada 'planilha1' e por fim salvar
no mesmo caminho que está o arquivo.

Teste e dê retorno.

att,

 
Postado : 06/04/2017 8:02 pm
(@osvaldomp)
Posts: 858
Prominent Member
 

Experimente:

Sub GeraArquivos()
 Dim v As Long, LR As Long, c As String, wb As Workbook
 Dim cab As Variant, ws As Worksheet, n As Long
  Application.ScreenUpdating = False
  Set ws = ActiveSheet: n = 1
  cab = Range("A1:D1").Value
  LR = Cells(Rows.Count, 1).End(3).Row
   For v = 2 To LR Step 3000
    Set wb = Workbooks.Add(1)
     [A1].Resize(, 4).Value = cab
     [A2].Resize(3000, 4).Value = ws.Cells(v, 1).Resize(3000, 4).Value
     wb.SaveAs Filename:="C:SuaPastaNomeArquivo " & n
     wb.Close: n = n + 1
   Next v
  Application.ScreenUpdating = True
End Sub

obs. altere SuaPasta e NomeArquivo conforme desejado; caso você não queira salvar e fechar cada arquivo gerado exclua as duas linhas correspondentes no código.

Osvaldo

 
Postado : 06/04/2017 8:13 pm
(@bgoliveira)
Posts: 5
Active Member
Topic starter
 

brunoxro

Olá,
Muito obrigado pelo retorno!!

Testei com o seu arquivo e funcionou normalmente. Porém, tentei inserir o código em minha planilha e não está funcionando.

Estava dando erro na linha "Nlin = ws.Range("A1048575").End(xlUp).Row". Erro: "O método ''Range" do objeto '_Worksheet' falhou".

Alterei para A65536 e funcionou. Porém retornou erro na linha: "NCol = ws.Range("XAA1").End(xlToLeft).Column" com o mesmo erro.

Poderia me ajudar?
Coloquei o arquivo anexo. (Exlui alguns campos pois estava muito pesado).

Edit: Aproveitando, existe um modo que seja possível fazer o seguinte:

O arquivo possui 3 planilhas. Além de fazer essa divisão em 3mil na planilha1. Copiar as outras duas (planilha2, planilha3) para os próximos arquivos gerados.
É possível? Pois nesse caso, terei que copiar essas duas planilhas em todos os novos arquivos manualmente.

Estou trabalhando com esses dois tipos de arquivo. Uma com somente uma planilha (que vou usar oq vc já passou, somente identificar esse erro) e o outro com 3 planilhas que preciso mover as outras duas também.

 
Postado : 08/04/2017 5:26 pm
(@mprudencio)
Posts: 2749
Famed Member
 

A sua planilha original é igual a que vc esta disponibilizando?

A sua segunda parte nao é dificil porem é preciso ter as planilhas no seu modelo.

E necessario saber onde estao os dados para poder fazer a copia.

Marcelo Prudencio
Microsoft Excel Brasil no Facebook

"Começar já é a metade do caminho."
Autor Desconhecido

Simplifica que simples fica.
Nicole Tomazella.

"O Simples é Sempre Melhor Que o Complicado"
Jorge Paulo Lemann.

 
Postado : 08/04/2017 5:58 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Oliveira,

Você usa o Excel 2003? Como esses arquivos são xls, o número de linhas e colunas é menor.
No caso a correção para o erro é mudar para:

NCol = ws.Range("IV1").End(xlToLeft).Column

No arquivo em anexo já está corrigido.

Agora sobre as 3 planilhas que você falou, não entendi o que você precisa.
Você tem três planilhas, quer juntar em uma e depois gerar as várias planilhas com 3001 linhas?

att,

 
Postado : 08/04/2017 6:09 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite bgoliveira

Como você é novato no fórum, sugiro tomar conhecimento do conteúdo dos links abaixo, pois você anexou arquivo sem compactar, contrariando as regras do fórum.

viewtopic.php?f=7&t=203
viewtopic.php?f=7&t=7903
viewtopic.php?f=7&t=3841
viewtopic.php?f=7&t=16757
viewtopic.php?f=7&t=12600
viewtopic.php?f=7&t=3371

[]s

Patropi - Moderador

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

 
Postado : 08/04/2017 6:12 pm
(@bgoliveira)
Posts: 5
Active Member
Topic starter
 

brunoxro

Olá, obrigado pelo retorno!!
Para este primeiro caso, está resolvido, testei aqui!!

Somente uma coisa. Após dividir, os novos arquivos abrem desta forma, segue anexo. É normal?

Para o segundo caso, é o seguinte:
O arquivo de ContratoWF eu preciso que as abas "Mantis" e "ListaBorgs" sejam copiadas para os novos arquivos e somente a aba "Itens" seja dividida em 3mil e também inserida nos novos arquivos.

 
Postado : 08/04/2017 6:26 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa tarde,

Esse erro não é comum, isso aconteceu porque no código para salvar em .xls tem que especificar. No arquivo em anexo o problema já está corrigido.

Teste o código que está no módulo1, fiz algumas alterações para salvar as planilhas junto com as linhas.

Uma dúvida, você precisa mesmo salvar em .xls? A sua versão de Excel não é a 2003 e os arquivos (esses gerados) em .xls são maiores.

att,

 
Postado : 09/04/2017 12:01 pm
(@bgoliveira)
Posts: 5
Active Member
Topic starter
 

brunoxro

Boa tarde, deu tudo certo para os dois casos!!
Obrigado.

Eu utilizo o Office 2016, porém o sistema em que eu preciso subir as planilhas, aceita somente ".xls".

Somente uma última dúvida. Os novos arquivos que estou gerando, estão tendo uma planilha a mais no final, "Planilha1".
Além das abas "Mantis", "Itens" e "ListaBorgs", ele está gerando mais uma "Planilha1".
Não consegui identificar no código o motivo.
Coloquei anexo, com a minha versão com a planilha correta.

 
Postado : 09/04/2017 2:14 pm
brunoxro
(@brunoxro)
Posts: 698
Honorable Member
 

Boa noite Oliveira,

Veja o arquivo em anexo. Coloquei uma linha de código para deletar a 'Planilha1' dos arquivos gerados.

OBS: Caso o problema tenha sido resolvido, não esqueça de marcar o Tópico como Resolvido.

att,

 
Postado : 09/04/2017 3:50 pm
(@bgoliveira)
Posts: 5
Active Member
Topic starter
 

brunoxro

Deu certo, muito obrigado!

Resolvido!

 
Postado : 09/04/2017 7:01 pm