Removendo Valores Duplicados no Excel VBA

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, geralmente podem conter valores duplicados. Pode ser necessário limpar os dados recebidos e remover duplicatas.

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

1 Intervalo (“A1: C8”). Remover Colunas Duplicadas: = 1, Cabeçalho: = xlSim

A sintaxe é:

RemoveDuplicates ([Columns], [Header]

  • [Colunas] - Especifique quais colunas são verificadas quanto a valores duplicados. Todas as colunas correspondem para serem consideradas duplicadas.
  • [Cabeçalho] - Os dados têm cabeçalho? xlNo (padrão), xlSim, xlSimNãoGuess

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

O valor padrão para Cabeçalho é xlNo. Claro que é melhor especificar este argumento, mas se você tiver uma linha de cabeçalho, é improvável que a linha de cabeçalho corresponda como uma duplicata.

RemoveDuplicates Usage Notes

  • 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 VBA

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

Remover linhas duplicadas

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

123 Sub RemoveDupsEx1 ()Intervalo (“A1: C8”). Remover Colunas Duplicadas: = 1, Cabeçalho: = xlSimEnd 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:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Colunas: = 1, Cabeçalho: = xlSimEnd Sub

UsedRange é incrivelmente útil, eliminando a necessidade de definir explicitamente o intervalo.

Depois de executar esse código, sua planilha ficará assim:

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

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

Remover Duplicados Comparando Várias Colunas

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Colunas: = Matriz (1, 2), Cabeçalho: = xlSimEnd 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.

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Colunas: = Matriz (3, 1), Cabeçalho: = xlSimEnd Sub

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

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

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Colunas: = Matriz (1, 2, 3), Cabeçalho: = xlSimEnd Sub

Removendo Linhas Duplicadas de uma Tabela

O RemoveDuplicates também pode ser aplicado a uma tabela do Excel exatamente da mesma maneira. No entanto, a sintaxe é um pouco diferente.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Tabela1"). DataBodyRange.RemoveDuplicates Colunas: = Array (1, 3), _Cabeçalho: = xl SimEnd Sub

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

Remover duplicatas de matrizes

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

No entanto, também escrevemos um procedimento VBA para remover duplicatas de um array.

Removendo duplicatas de linhas de dados usando VBA

O método RemoveDuplicates só funciona em colunas de dados, mas com algum pensamento "pronto para usar", você pode criar um procedimento VBA para lidar com linhas de dados.

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

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 nela transpondo-os em colunas, remover as duplicatas e, em seguida, copiá-los de volta, transpondo-os de volta para as linhas.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()'Desative a atualização de tela e os alertas - queremos que o código seja executado sem problemas, sem que o usuário veja'o que está acontecendoApplication.ScreenUpdating = FalseApplication.DisplayAlerts = False'Adicionar uma nova planilhaSheets.Add After: = ActiveSheet'Chame a nova planilha de' CopySheet 'ActiveSheet.Name = "CopySheet"'Copie os dados da planilha originalPlanilhas ("DataInRows"). UsedRange.Copy'Ative a nova planilha que foi criadaPlanilhas ("CopySheet"). Ative'Colar transpor os dados para que agora estejam em colunasActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operação: = xlNone, SkipBlanks: = _Falso, Transpor: = Verdadeiro'Remova as duplicatas das colunas 1 e 3ActiveSheet.UsedRange.RemoveDuplicates Colunas: = Matriz (1, 3), Cabeçalho _: = xl Sim'Limpe os dados na planilha originalPlanilhas ("DataInRows"). UsedRange.ClearContents'Copie as colunas de dados da nova planilha criadaPlanilhas ("Folha de cópia"). UsedRange.Copy'Ative a folha originalPlanilhas ("DataInRows"). Ativar'Colar transpor os dados não duplicadosActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operação: = xlNone, SkipBlanks: = _Falso, Transpor: = Verdadeiro'Excluir a folha de cópia - não é mais necessárioPlanilhas ("Copysheet"). Excluir'Ative a folha originalPlanilhas ("DataInRows"). Ativar'Volte a atualizar a tela e os alertasApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub

Este código assume que os dados originais nas linhas são mantidos em uma planilha chamada ‘DataInRows’

Depois de executar o código, sua planilha ficará assim:

A duplicata de ‘Maçãs’ na coluna E agora foi removida. O usuário está de volta a uma posição limpa, sem planilhas estranhas penduradas, e todo o processo foi feito sem problemas, sem tela piscando ou mensagens de aviso.

Você vai ajudar o desenvolvimento do site, compartilhando a página com seus amigos

wave wave wave wave wave