Notifications
Clear all

VBA-Copiar células de várias planilhas para uma só

6 Posts
3 Usuários
0 Reactions
2,941 Visualizações
(@lfelipe)
Posts: 3
Active Member
Topic starter
 

Boa tarde colegas, preciso de uma ajuda para realizar a seguinte tarefa.

Em um arquivo com mais de mil planilhas, preciso copiar a informação de uma determinada célula de cada uma das mil planilhas (aqui tratada como A1) e colá-las na planilha 1001 sequencialmente em uma coluna (aqui tratada como coluna A).

Então seria um macro para:

copiar A1 da planilha 1 e colar em A1 da planilha 1001;
copiar A1 da planilha 2 e colar em A2 da planilha 1001;
copiar A1 da planilha 3 e colar em A3 da planilha 1001;
(...)
copiar A1 da planilha 1000 e colar em A1000 da planilha 1001.

Acho que não deve ser muito difícil mas comecei a estudar macros esta semana e preciso urgentemente resolver isso.

Agradeço antecipadamente toda a ajuda.

Luís Felipe

 
Postado : 12/09/2012 11:31 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Tente adaptar o codigo à suas necessides.

Sub Carrega_BD()
'Declaração de variaveis
Dim OldName As String, cSheet As String
Dim rw As Long, lw As Long
Dim sDir As String, sPath As String

'Determina o nome do arquivo corrente
OldName = ThisWorkbook.Name
'Determina o nome da sheet corrente
cSheet = ActiveSheet.Name
'Determina qual a ultima coluna preenchida no caso fixado em coluna A
rw = 1 'Cells(1, Cells.Columns.Count).End(xlToLeft).Column
'Determina qual a ultima linha da coluna A preenchida
lw = Cells(Cells.Rows.Count, "A").End(xlUp).Row
'Determina qual o caminho onde estão os arquivos (neste caso mo mesmo diretorio do arquivo corrente)
sPath = ThisWorkbook.Path 'Cells(1, 11)
'Acrescenta a barra invertida se necessario
If Right(sPath, 1) <> "" Then
    sPath = sPath & ""
    Else
    sPath = sPath
End If

'altera o diretorio de trabalho
ChDir sPath
'Começa a procurar arquivos com extensão xls
sDir = Dir("*.xls?")
'Inicia o loop até que não mais encontre arquivos
Do While sDir <> ""
           'Comparação para excluir o arquivo corrente da "pesquisa"
           If sDir <> OldName Then
              'Congela a tela para o usuario e abre o arquivo localizado
              Application.DisplayAlerts = False
              Application.ScreenUpdating = False
              Workbooks.Open Filename:=sDir, UpdateLinks:=0
              lw = lw + 1
                 Workbooks(OldName).Sheets(cSheet).Cells(lw, rw) = Workbooks(sDir).Sheets("Plan1").Cells(1, 1).Value
                
'Fecha o arquivo sem salvar
            Workbooks(sDir).Close SaveChanges:=False
            sDir = Dir
            Else
            Exit Sub
            End If
Loop
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub
 
Postado : 12/09/2012 1:44 pm
(@lfelipe)
Posts: 3
Active Member
Topic starter
 

Obrigado Reinaldo.

Está um pouco difícil para mim entender, vou dar uma estudada.

Abraços.

 
Postado : 12/09/2012 3:41 pm
(@lfelipe)
Posts: 3
Active Member
Topic starter
 

Reinlado, no caso abaixo, vc saberia como fazer para colar as células B17, B19 e B24 na linha 1. Do jeito que eu fiz as três células são coladas nas colunas A, B e C.

Abraços.

'
Sheets("800001").Select
Range("B17,B19,B24").Select
Selection.Copy
ActiveWorkbook.Worksheets.Add
Range("A1:C1").Select
ActiveSheet.Paste
With ActiveSheet
.Move after:=Worksheets(Worksheets.Count)
End With
With ActiveSheet
.Name = "800001A"
End With

 
Postado : 12/09/2012 6:34 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Qdo é copiada uma range mesmo que não consecutiva, ao "colar" a mesma é inserida sequencialmente.
Então se quiser cd uma em um local especifico deve copiar/colar uma a uma. Agora se quiser que fiquem somente em B (B1,B2,B3) selecione somente a primeira B1

 
Postado : 13/09/2012 5:41 am
(@pexis)
Posts: 112
Estimable Member
 

n serve isso?

=INDIRETO(LIN(A1) & "!A1")

e copia pra baixo

 
Postado : 13/09/2012 10:46 pm