Eliminación de Valores Duplicados en Excel VBA

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on marzo 4, 2022

Este tutorial demostrará cómo eliminar duplicados utilizando el método RemoveDuplicates en VBA.

Método RemoveDuplicates

Cuando los datos se importan o pegan en una hoja de cálculo de Excel, a menudo pueden contener valores duplicados.  Es posible que tenga que limpiar los datos entrantes y eliminar los duplicados.

Afortunadamente, existe un método fácil dentro del Objeto Range de VBA que le permite hacer esto.

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

La sintaxis es:

RemoveDuplicates([Columnas],[Encabezado]

  • [Columnas] – Especifique qué columnas se comprueban en busca de valores duplicados. Todas las columnas deben coincidir para ser consideradas duplicadas.
  • [Encabezado] – ¿Los datos tienen una cabecera? xlNo (por defecto), xlYes, xlYesNoGuess

Técnicamente, ambos parámetros son opcionales. Sin embargo, si no especifica el argumento Columnas, no se eliminará ningún duplicado.

El valor por defecto de Encabezado es xlNo. Por supuesto, es mejor especificar este argumento, pero si tiene una fila de encabezado, es poco probable que la fila de encabezado coincida como un duplicado.

Notas de uso de RemoveDuplicates

  • Antes de utilizar el método RemoveDuplicates, debe especificar un rango a utilizar.
  • El método RemoveDuplicates eliminará las filas con duplicados encontrados, pero mantendrá la fila original con todos los valores.
  • El método RemoveDuplicates sólo funciona en las columnas y no en las filas, pero se puede escribir código VBA para rectificar esta situación (véase más adelante).

Datos de muestra para ejemplos de VBA

Para mostrar cómo funciona el código de ejemplo, se utilizan los siguientes datos de muestra:

datos muestra ejemplos vba

 

Eliminar filas duplicadas

Este código eliminará todos las filas duplicadas basándose sólo en los valores de la columna A:

Sub RemoverDuplicadosEjemplo1()
   Range(“A1:C8”).RemoveDuplicates Columns:=1, Header:=xlYes
End Sub

Observe que hemos definido explícitamente el rango «A1:C8». En su lugar, puede utilizar la opción UsedRange. UsedRange determinará la última fila y columna utilizada de sus datos y aplicará RemoveDuplicates a todo ese rango:

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

UsedRange es increíblemente útil, ya que elimina la necesidad de definir explícitamente el rango.

Después de ejecutar este código, su hoja de cálculo tendrá el siguiente aspecto:

remover duplicados UsedRange

 

Observe que, como sólo se ha especificado la columna A (columna 1), se ha eliminado el duplicado «Manzanas» que había en la fila 5. Sin embargo, la Cantidad (columna 2) es diferente.

Para eliminar duplicados, comparando varias columnas, podemos especificar esas columnas utilizando un método Array .

Eliminar duplicados comparando varias columnas

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

La matriz indica a VBA que compare los datos utilizando las columnas 1 y 2 (A y B).

Las columnas de la matriz no tienen que estar en orden consecutivo.

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

En este ejemplo, las columnas 1 y 3 se utilizan para la comparación de duplicados.

Este ejemplo de código utiliza las tres columnas para buscar duplicados:

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

Eliminar filas duplicadas de una tabla

La función RemoveDuplicates también puede aplicarse a una Tabla de Excel exactamente de la misma manera. Sin embargo, la sintaxis es ligeramente diferente.

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

Esto eliminará los duplicados en la tabla basados en las columnas 1 y 3 (A y C).  Sin embargo, no ordena el formato de color de la tabla, y verá que quedan filas en blanco de color en la parte inferior de la tabla.

Eliminar los duplicados de las matrices

Si necesita eliminar los valores duplicados de una matriz, por supuesto que puede enviar su matriz a Excel, utilizar el método RemoveDuplicates y volver a importar la matriz.

Sin embargo, también escribimos un Procedimiento VBA para eliminar los duplicados de una matriz.

Eliminar duplicados de filas de datos mediante VBA

El método RemoveDuplicates sólo funciona en columnas de datos, pero con un poco de pensamiento «mente abierta», puede crear un procedimiento VBA para tratar con filas de datos.

Supongamos que sus datos tienen el siguiente aspecto en su hoja de trabajo:

datos muestra ejemplos horizontal

 

Tiene los mismos duplicados que antes en las columnas B y E, pero no puede eliminarlos con el método RemoveDuplicates.

La respuesta es utilizar VBA para crear una hoja de cálculo adicional, copiar los datos en ella transponiéndolos en columnas, eliminar los duplicados y volver a copiarlos transponiéndolos en filas.

Sub remover_duplicados_en_filas()
    'Desactivar la actualización de la pantalla y las alertas: queremos que el código se ejecute sin que el usuario lo vea
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    'Añadir una nueva hoja de trabajo
    Sheets.Add After:=ActiveSheet
    'Llama a la nueva hoja de trabajo 'Copia'
    ActiveSheet.Name = "Copia"
    'Copiar los datos de la hoja de cálculo original
    Sheets("Hoja1").UsedRange.Copy
    'Activar la nueva hoja que se ha creado
    Sheets("Copia").Activate
    'Pegar transponer los datos para que ahora estén en columnas
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
   'Eliminar los duplicados de las columnas 1 y 3
    ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 3), Header _
        :=xlYes
    'Borrar los datos de la hoja de cálculo original
    Sheets("Hoja1").UsedRange.ClearContents
    'Copiar las columnas de datos de la nueva hoja de cálculo creada
   Sheets("Copia").UsedRange.Copy
   'Activar la hoja original
    Sheets("Hoja1").Activate
    
   'Pegar transponer los datos no duplicados
    ActiveSheet.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True
    'Borrar la hoja de copia - ya no es necesaria
    Sheets("Copia").Delete
    'Activar la hoja original
    Sheets("Hoja1").Activate
    'Volver a activar la actualización de la pantalla y las alertas
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub

 

Este código asume que los datos originales en filas se mantienen en una hoja de trabajo llamada ‘Hoja1’

Después de ejecutar el código, su hoja de trabajo tendrá el siguiente aspecto:

remover duplicados en filas

 

El duplicado «Manzanas» en la columna E ha sido eliminado. El usuario vuelve a estar en una posición limpia, sin hojas de trabajo extrañas colgando, y todo el proceso se ha realizado sin problemas, sin parpadeos en la pantalla ni mensajes de advertencia.

vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples