Ir ao conteúdo
  • Cadastre-se

Visual Basic comparar dados de 2 planilhas, copiar dados diferentes


Posts recomendados

Bom dia, pessoal!

Gostaria da ajuda de vocês para o seguinte problema:

Preciso comparar os dados entre duas planilhas do mesmo arquivo de trabalho. Planilha de BASE e Planilha de RESULTADOS.

Para isso gostaria de fazer uma rotina de VBA, pois terei que fazer essa comparação várias vezes.

Preciso verificar se todos os dados da BASE estão contidos em RESULTADOS. Caso não esteja, preciso copiar a linha da BASE e colar em RESULTADOS.

Como no exemplo, as linhas 5, 9 e 10 da BASE não estão em RESULTADOS, então preciso copiar essas linhas para  RESULTADOS. Não precisa ser colado na sequência, pode ser na última linha da planilha, o importante é ter todos os dados.

 

Desde já agradeço a ajuda.

 

Exemplo BASE DE DADOS

image.png.1d267d78a706b7d7b5512d2eb733c7f9.png

 

Exemplo RESULTADOS

image.png.c3a807b1b25cba2de64bf29a5917f4e0.png

Link para o comentário
Compartilhar em outros sites

@Basole

Eu consegui fazer um cód que, com os testes que fiz, parece estar atendendo à minha demanda, como não conheço muito bem as funcionalidades do VBA, não sei se tem algum jeito mais fácil e otimizado para fazer. Ao testar com poucas linhas o cálculo é relativamente rápido, porém quando aumentar muito a quantidade de linhas (10000 aprox/ano) talvez fique bastante lento.

Num teste a mais que eu fiz, pedi para a rotina escrever em cada linha i verificada da base um status de "OK", e coloquei uma condição para a rotina verificar somente as linhas que ainda não foram verificadas antes, para também não precisar verificar todas as linhas da BASE de novo sempre que for atualizar os resultados (mas essa parte não está no cód abaixo).

 

O cód ficou bem simples, porque só utilizei as lógicas e funções que eu conheço, que se resumem a "IF e "DO" haha.

Pode me dar um feedback de como ficou e alguma dica pra otimizar, caso haja?

 

Desde já agradeço.

 

Att

 

Sub teste()
Dim i, j, m, n As Integer

Sheets("BASE").Select
m = Cells(Rows.Count, 1).End(xlUp).Row
Sheets("resultados").Select
n = Cells(Rows.Count, 1).End(xlUp).Row
i = 1 
j = 1 
Do Until i = m + 1
j = 1
    Do Until j = n + 1
        If Worksheets("BASE").Cells(i, 1) = Worksheets("resultados").Cells(j, 1) And Worksheets("BASE").Cells(i, 2) = Worksheets("resultados").Cells(j, 2) And Worksheets("BASE").Cells(i, 3) = Worksheets("resultados").Cells(j, 3) Then 
        'faz todas as verificações, comparando linha i da BASE com cada linha j de resultados: se houver linha igual, sai do loop e pula pra prox linha da base para começar as comparações novamente
       
        Exit Do
        Else
           j = j + 1
           If j > n Then 'ou seja, comparou a linha i de BASE com todas as linhas j de resultados e não encontrou, assim copia e cola a linha i da base na última linha de resultados
           Sheets("BASE").Select
           Range(Cells(i, 1), Cells(i, 3)).Select
           Selection.Copy
           Sheets("resultados").Select
           n = Cells(Rows.Count, 1).End(xlUp).Row
           Cells(n + 1, 1).Select
           ActiveSheet.Paste
           
           
            Exit Do
            End If
    
        End If
    Loop
    
i = i + 1
Loop
Link para o comentário
Compartilhar em outros sites

  • 6 meses depois...
Em 08/01/2020 às 09:01, Flávia de Oliveira Batista disse:

Dim i, j, m, n As Integer Sheets("BASE").Select m = Cells(Rows.Count, 1).End(xlUp).Row Sheets("resultados").Select n = Cells(Rows.Count, 1).End(xlUp).Row i = 1 j = 1 Do Until i = m + 1 j = 1 Do Until j = n + 1 If Worksheets("BASE").Cells(i, 1) = Worksheets("resultados").Cells(j, 1) And Worksheets("BASE").Cells(i, 2) = Worksheets("resultados").Cells(j, 2) And Worksheets("BASE").Cells(i, 3) = Worksheets("resultados").Cells(j, 3) Then 'faz todas as verificações, comparando linha i da BASE com cada linha j de resultados: se houver linha igual, sai do loop e pula pra prox linha da base para começar as comparações novamente Exit Do Else j = j + 1 If j > n Then 'ou seja, comparou a linha i de BASE com todas as linhas j de resultados e não encontrou, assim copia e cola a linha i da base na última linha de resultados Sheets("BASE").Select Range(Cells(i, 1), Cells(i, 3)).Select Selection.Copy Sheets("resultados").Select n = Cells(Rows.Count, 1).End(xlUp).Row Cells(n + 1, 1).Select ActiveSheet.Paste Exit Do End If End If Loop i = i + 1 Loop

PRECISAVA DE ALGO PARECIDO

verificar na duas colunas na saida com com o banco de dados 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!