Notifications
Clear all

FOR NEXT... Copiando dados de outra Aba com Critério

2 Posts
2 Usuários
0 Reactions
951 Visualizações
(@fernandoag)
Posts: 1
New Member
Topic starter
 

Boa noite pessoal!
Sou novo aqui, e gostaria da ajuda de vocês, se possível. Desde já, agradeço!

Tenho uma Arquivo com 02 Abas: Relatorio e Dados.

Preciso fazer com que a macro percorra um determinado RANGE da Aba Dados e quando ele encontrar o critério especificado (data na célula H2) ele copie algumas das células daquela linha para a planilha Relatorio, e assim sussessivamente, até copiar todas as referências.

Fiz a estrutura com For Next, mas não sei o que estou errado, ou até mesmo se essa Estrutura seria a adequada.

Segue o código:

Sub Pesquisa()
'Limpa o intervalo da planilha
Relatorio.Range("A5:H100").ClearContents
'Descobre a última linha digitada da Dados tendo como referência a Coluna B
ultimalinha = Dados.Cells(Rows.Count, "B").End(xlUp).Row

'Minha planilha inicia na linha 5
lin = 5
For i = 5 To ultimalinha
         'Se os dados das células forem iguais Então
     If Relatorio.Range("H2") = Dados.Cells(i, 14) Then
        'Copie as dados das células
        Relatorio.Cells(lin, 1) = Dados.Cells(lin, 1)
        Relatorio.Cells(lin, 2) = Dados.Cells(lin, 2)
        Relatorio.Cells(lin, 3) = Dados.Cells(lin, 3)
        Relatorio.Cells(lin, 4) = Dados.Cells(lin, 4)
        Relatorio.Cells(lin, 5) = Dados.Cells(lin, 5)
        lin = lin + 1
     End If
Next

End Sub

O problema é que ele não está localizando corretamente. Ele entende que possui duas datas que atendem o critério, mas ele copia sempre as 02 primeiras linhas e não as linhas que possuem as datas.
Poderiam me ajudar? Em anexo planilha exemplo!

 
Postado : 13/04/2020 7:59 pm
(@anderson)
Posts: 203
Reputable Member
 

https://youtu.be/_Ypqqj5Zx0U

Sub Pesquisa()

Dim linDados As Long
Dim linRelatorio As Long
Dim ultimaLinhaDados As Long
'Limpa o intervalo da planilha
Relatorio.Range("A5:H100").ClearContents
'Descobre a última linha digitada da Dados tendo como referência a Coluna B
ultimaLinhaDados = Dados.Cells(Rows.Count, "B").End(xlUp).Row

'Minha planilha inicia na linha 5
linRelatorio = 5
For linDados = 5 To ultimaLinhaDados
         'Se os dados das células forem iguais Então
     If Relatorio.Range("H2") = Dados.Cells(linDados, 14) Then
        'Copie as dados das células
        Relatorio.Cells(linRelatorio, 1) = Dados.Cells(linDados, 1)
        Relatorio.Cells(linRelatorio, 2) = Dados.Cells(linDados, 2)
        Relatorio.Cells(linRelatorio, 3) = Dados.Cells(linDados, 3)
        Relatorio.Cells(linRelatorio, 4) = Dados.Cells(linDados, 4)
        Relatorio.Cells(linRelatorio, 5) = Dados.Cells(linDados, 5)
        linRelatorio = linRelatorio + 1
     End If
Next linDados

End Sub

Em 90% dos casos em que não se anexa o arquivo, ocorrem mal-entendidos, gerando perda de tempo de ambos os lados.

 
Postado : 14/04/2020 5:22 am