Eliminación de Valores Duplicados en Excel VBA
In this Article
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:
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:
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:
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:
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.