Removendo Valores Duplicados no Excel com VBA

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on July 10, 2023

Este tutorial demonstrará como remover duplicatas usando o método RemoveDuplicates no VBA.

Método RemoveDuplicates

Quando os dados são importados ou colados em uma planilha do Excel, muitas vezes eles podem conter valores duplicados. Talvez seja necessário limpar os dados de entrada e remover as duplicatas.

Felizmente, há um método fácil no objeto Range do VBA que permite fazer isso.

Range("A1:C8").RemoveDuplicates Columns:=1, Header:=xlYes

A sintaxe é:

RemoveDuplicates([Columns],[Header]

  • [Columns] – Especifica quais colunas são verificadas quanto a valores duplicados. Todas as colunas devem corresponder para serem consideradas duplicadas.
  • [Header] – Os dados têm um cabeçalho? xlNo (padrão), xlYes, xlYesNoGuess

Tecnicamente, ambos os parâmetros são opcionais. Entretanto, se você não especificar o argumento Columns, nenhuma duplicata será removida.

O valor padrão para Header é xlNo. É claro que é melhor especificar esse argumento, mas se você tiver uma linha de cabeçalho, é improvável que a linha de cabeçalho corresponda a uma duplicata.

Notas de Uso do RemoveDuplicates

  • Antes de usar o método RemoveDuplicates, você deve especificar um intervalo a ser usado.
  • O método RemoveDuplicates removerá todas as linhas com duplicatas encontradas, mas manterá a linha original com todos os valores.
  • O método RemoveDuplicates só funciona em colunas e não em linhas, mas o código VBA pode ser escrito para corrigir essa situação (veja mais adiante).

Dados de Amostra Para Exemplos de VBA

Para mostrar como o código de exemplo funciona, são usados os seguintes dados de amostra:

dados amostra duplicatas

Remover Linhas Duplicadas

Esse código removerá todas as linhas duplicadas com base apenas nos valores da coluna A:

Sub RemoverDupsEx1()
Range("A1:C8").RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

Observe que definimos explicitamente o intervalo “A1:C8”. Em vez disso, você pode usar o UsedRange. O UsedRange determinará a última linha e coluna usadas de seus dados e aplicará RemoveDuplicates a todo esse intervalo:

Sub RemoverDups_UsedRange()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

O UsedRange é incrivelmente útil, pois elimina a necessidade de você definir explicitamente o intervalo.

Depois de executar esse código, sua planilha terá a seguinte aparência:

resultado eliminado duplicatas

Observe que, como apenas a coluna A (coluna 1) foi especificada, a duplicata “Maçãs” anteriormente na linha 5 foi removida. Entretanto, a Quantidade (coluna 2) é diferente.

Para remover duplicatas, comparando várias colunas, podemos especificar essas colunas usando um método Array.

Remover Duplicatas Comparando Várias Colunas

Sub RemoverDups_MultiplasColunas()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2) , Header:=xlYes
End Sub

O Array informa ao VBA para comparar os dados usando as colunas 1 e 2 (A e B).

As colunas da matriz não precisam estar em ordem consecutiva.

Sub ExemploSimples()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(3, 1) , Header:=xlYes
End Sub

Neste exemplo, as colunas 1 e 3 são usadas para a comparação duplicada.

Esse exemplo de código usa todas as três colunas para verificar se há duplicatas:

Sub ExemploSimples()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2, 3) , Header:=xlYes
End Sub

Remoção de Linhas Duplicadas de uma Tabela

O RemoveDuplicates também pode ser aplicado a uma tabela do Excel exatamente da mesma forma. Entretanto, a sintaxe é ligeiramente diferente.

Sub ExemploSimples()
ActiveSheet.ListObjects("Tabela1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 3), _
Header:=xlYes
End Sub

Isso removerá as duplicatas da tabela com base nas colunas 1 e 3 (A e C). No entanto, ele não organiza a formatação de cores da tabela, e você verá linhas em branco coloridas na parte inferior da tabela.

Remover Duplicatas de Matrizes

Se precisar remover valores duplicados de uma matriz, é claro que você pode gerar a matriz no Excel, usar o método RemoveDuplicates e reimportar a matriz.

Entretanto, também escrevemos um procedimento VBA para remover duplicatas de uma matriz.

Remoção de Duplicatas de Linhas de Dados Usando VBA

O método RemoveDuplicates só funciona em colunas de dados, mas com um pouco de pensamento “fora da caixa”, você pode criar um procedimento VBA para lidar com linhas de dados.

Suponha que seus dados tenham a seguinte aparência em sua planilha:

dados amostra transpostos

 

Você tem as mesmas duplicatas de antes nas colunas B e E, mas não pode removê-las usando o método RemoveDuplicates.

A resposta é usar o VBA para criar uma planilha adicional, copiar os dados para ela transpondo-os para colunas, remover as duplicatas e, em seguida, copiá-los novamente transpondo-os de volta para linhas.

Sub DuplicatasEmLinhas()
    'Desative a atualização da tela e os alertas - queremos que o código seja executado sem problemas, sem que o usuário veja
    'o que está acontecendo
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    'Adicionar uma nova planilha
    Sheets.Add After:=ActiveSheet
    'Chamar a nova planilha de "PlanilhaCopia"
    ActiveSheet.Name = "PlanilhaCopia"
    'Copiar os dados da planilha original
    Sheets("DadosEmLinhas").UsedRange.Copy
    'Ativar a nova planilha que foi criada
    Sheets("PlanilhaCopia").Activate
    'Colar transpor os dados para que fiquem em colunas
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
   'Remover as duplicatas das colunas 1 e 3
    ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 3), Header _
        :=xlYes
    'Limpar os dados da planilha original
    Sheets("DadosEmLinhas").UsedRange.ClearContents
    'Copiar as colunas de dados da nova planilha criada
   Sheets("PlanilhaCopia").UsedRange.Copy
   'Ativar a planilha original
    Sheets("DadosEmLinhas").Activate
    
   'Colar transpor os dados não duplicados
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    'Excluir a PlanilhaCopia - não é mais necessária
    Sheets("PlanilhaCopia").Delete
    'Ativar a planilha original
    Sheets("DadosEmLinhas").Activate
    'Voltar a ativar a atualização da tela e os alertas
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

Esse código pressupõe que os dados originais em linhas sejam mantidos em uma planilha chamada ‘DadosEmLinhas’

Depois de executar o código, sua planilha terá a seguinte aparência:

remocao colunas duplicadas

A duplicata “Maçãs” na coluna E foi removida. O usuário está de volta a uma posição limpa, sem planilhas estranhas por perto, e todo o processo foi feito sem problemas, sem cintilação da tela ou mensagens de aviso.

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA