Página 1 de 1

VBA COPIAR E COLAR DADOS CONFORME CRITÉRIO

Enviado: 19 Abr 2020 às 19:49
por refernande
Boa Noite,
Estou tendo uma dificuldade em finalizar um projeto em VBA. O que acontece é que o a mesma não está percorrendo as planilhas para atribuir os dados que é Copiar dados célula "Z21" e colar formuladas entre as colunas "E21 a X21" se a data linha 17 for igual a "E18".
Segue em anexo planilha para ajuda de todos. Obrigado

Re: VBA COPIAR E COLAR DADOS CONFORME CRITÉRIO

Enviado: 19 Abr 2020 às 20:31
por osvaldomp
Para resolver altere conforme abaixo.

atual
End If
Exit For
Next Coluna

altere para
Exit For
End If
Next Coluna


dicas
1. não selecione, copie e cole direto; em lugar de
Código: Selecionar todos
   'Sheets(i).Select
      'Range("Z21").Select '--selecione a célula que você deseja copiar
      'Selection.Copy
      'Sheets(i).Cells(21, Coluna).Select '-- código para colar
      'Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
use
Código: Selecionar todos
      Sheets(i).Range("Z21").Copy
      Sheets(i).Cells(21, Coluna).PasteSpecial xlPasteFormulas

2. se Range("E8") for referente à planilha (i), então utilize ~~~> Sheets(i).Range("E8") se não o código pegará E8 da planilha ativa

3. no lugar do Loop For Coluna ... Next pesquise sobre o uso do método Find

Re: VBA COPIAR E COLAR DADOS CONFORME CRITÉRIO

Enviado: 20 Abr 2020 às 07:33
por refernande
Bom dia osvaldomp,
Só não entendi como item 3.

O restante do código ficou dessa forma olha se está correto por favor.


Sub Dados()

Dim Coluna As Integer
Dim i As Integer

For i = 1 To ThisWorkbook.Sheets.Count

If Sheets(i).Name <> "EAP" And Sheets(i).Name <> "CAPA" Then
For Coluna = 5 To 24

If Sheets(i).Cells(17, Coluna).Value = Sheets(i).Range("E8") Then

Sheets(i).Range("Z21").Copy
Sheets(i).Cells(21, Coluna).PasteSpecial xlPasteFormulas

Exit For
End If

Next Coluna

End If

Next i

End Sub

Re: VBA COPIAR E COLAR DADOS CONFORME CRITÉRIO

Enviado: 20 Abr 2020 às 09:42
por osvaldomp
refernande escreveu: Só não entendi como item 3.
O seu código utiliza um Loop na linha 17 da coluna 5 até a 24 buscando a data igual a E8. Se a data estiver por exemplo na coluna 22, o código terá verificado da coluna 5 até a coluna 21 sem necessidade, pois ele poderia ter ido direto à coluna 22. Isso é o que o Find faz e de forma mais rápida. Equivale ao recurso de planilha Localizar/Substituir (Ctrl+L). No caso do seu projeto a diferença no tempo de execução não será perceptível, pois a busca será em no máximo 20 células, porém, em projetos futuros, se a busca for feita em grande quantidade de células o Loop talvez fique inviável. Houve casos em que um usuário pediu ajuda no fórum devido à lentidão da macro, pois ele usava Loop em cerca de 70.000 células.
Se você tiver interesse em aprender sobr o Find então pesquise. Coloquei na busca do Sábio Google "vba método Find" e retornou 84.000 resultados, o primeiro deles é este ~~~>
https://docs.microsoft.com/pt-br/office ... range.find

O restante do código ficou dessa forma olha se está correto por favor.
Me parece que está correto.

Re: VBA COPIAR E COLAR DADOS CONFORME CRITÉRIO

Enviado: 20 Abr 2020 às 10:20
por refernande
osvaldomp,
Sou um pouco leigo a respeito de vba como ficaria o código usando essa função, visto que possa esta usando essa macro para outros arquivos que tenho.

Código:

Sub Dados()

Dim Coluna As Integer
Dim i As Integer

For i = 1 To ThisWorkbook.Sheets.Count

If Sheets(i).Name <> "EAP" And Sheets(i).Name <> "CAPA" Then
For Coluna = 5 To 24

If Sheets(i).Cells(17, Coluna).Value = Sheets(i).Range("E8") Then

Sheets(i).Range("Z21").Copy
Sheets(i).Cells(21, Coluna).PasteSpecial xlPasteFormulas

Exit For
End If

Next Coluna

End If

Next i

End Sub