Eliminar valores duplicados en Excel VBA

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 deba 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.

1 Rango ("A1: C8"). Eliminar columnas duplicadas: = 1, Encabezado: = xl Sí

La sintaxis es:

RemoveDuplicates ([Columns], [Header]

  • [Columnas] - Especifique qué columnas se comprueban en busca de valores duplicados. Todas las columnas coinciden mucho para ser consideradas un duplicado.
  • [Encabezamiento] - ¿Los datos tienen un encabezado? xlNo (predeterminado), xlYes, xlYesNoGuess

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

El valor predeterminado para el 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 que se utilizará.
  • El método RemoveDuplicates eliminará cualquier fila con duplicados encontrados, pero mantendrá la fila original con todos los valores.
  • El método RemoveDuplicates solo funciona en columnas y no en filas, pero se puede escribir código VBA para rectificar esta situación (ver 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á todas las filas duplicadas basándose únicamente en los valores de la columna A:

123 Sub RemoveDupsEx1 ()Rango ("A1: C8"). Eliminar columnas duplicadas: = 1, Encabezado: = xl SíEnd Sub

Observe que definimos explícitamente el rango "A1: C8". En su lugar, puede utilizar UsedRange. UsedRange determinará la última fila y columna utilizada de sus datos y aplicará RemoveDuplicates a todo ese rango:

123 Sub RemoveDups_UsedRange ()ActiveSheet.UsedRange.RemoveDuplicates Columnas: = 1, Encabezado: = xlYesEnd Sub

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

Después de ejecutar este código, su hoja de trabajo ahora se verá así:

Tenga en cuenta que debido a que solo se especificó la columna A (columna 1), se eliminó el duplicado "Manzanas" que anteriormente estaba en la fila 5. Sin embargo, la Cantidad (columna 2) es diferente.

Para eliminar duplicados, comparando múltiples columnas, podemos especificar esas columnas usando un método Array.

Eliminar duplicados comparando varias columnas

123 Sub RemoveDups_MultColumns ()ActiveSheet.UsedRange.RemoveDuplicates Columnas: = Matriz (1, 2), Encabezado: = xlYesEnd Sub

La matriz le dice a VBA que compare los datos usando las columnas 1 y 2 (A y B).

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

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Columnas: = Matriz (3, 1), Encabezado: = xlYesEnd Sub

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

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

123 Sub SimpleExample ()ActiveSheet.UsedRange.RemoveDuplicates Columnas: = Matriz (1, 2, 3), Encabezado: = xlYesEnd Sub

Eliminar filas duplicadas de una tabla

Los RemoveDuplicates también se pueden aplicar a una tabla de Excel exactamente de la misma manera. Sin embargo, la sintaxis es ligeramente diferente.

1234 Sub SimpleExample ()ActiveSheet.ListObjects ("Table1"). DataBodyRange.RemoveDuplicates Columns: = Array (1, 3), _Encabezado: = xlYesEnd Sub

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

Eliminar duplicados de matrices

Si necesita eliminar valores duplicados de una matriz, por supuesto, puede generar su matriz en Excel, usar el método RemoveDuplicates y volver a importar la matriz.

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

Eliminar duplicados de filas de datos usando VBA

El método RemoveDuplicates solo funciona en columnas de datos, pero con un pensamiento "listo para usar", puede crear un procedimiento VBA para manejar filas de datos.

Suponga que sus datos se ven así 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 usar VBA para crear una hoja de trabajo adicional, copiar los datos en ella y transponerlos en columnas, eliminar los duplicados y luego copiarlos nuevamente y transponerlos nuevamente en filas.

12345678910111213141516171819202122232425262728293031323334353637 Sub DuplicatesInRows ()'Desactive la actualización de la pantalla y las alertas: queremos que el código se ejecute sin problemas sin que el usuario vea'Que esta pasandoApplication.ScreenUpdating = FalsoApplication.DisplayAlerts = Falso'Agregar una nueva hoja de trabajoSheets.Add After: = ActiveSheet'Llame a la nueva hoja de trabajo' CopySheet 'ActiveSheet.Name = "CopySheet"'Copie los datos de la hoja de trabajo originalHojas de cálculo ("DataInRows"). UsedRange.Copy'Activar la nueva hoja que se ha creadoHojas de cálculo ("Copiar hoja"). Activar'Pegue, transponga los datos para que ahora estén en columnasActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Falso, Transponer: = Verdadero'Elimina los duplicados de las columnas 1 y 3ActiveSheet.UsedRange.RemoveDuplicates Columnas: = Matriz (1, 3), Encabezado _: = xl Sí'Borrar los datos en la hoja de trabajo originalHojas de cálculo ("DataInRows"). UsedRange.ClearContents'Copie las columnas de datos de la nueva hoja de trabajo creadaHojas ("Copysheet"). UsedRange.Copy'Activar la hoja originalHojas de cálculo ("DataInRows"). Activar'Pegar transponer los datos no duplicadosActiveSheet.Range ("A1"). PasteSpecial Paste: = xlPasteAll, Operation: = xlNone, SkipBlanks: = _Falso, Transponer: = Verdadero'Eliminar la hoja de copia - ya no es necesariaHojas de cálculo ("Copysheet"). Eliminar'Activar la hoja originalHojas de cálculo ("DataInRows"). Activar'Vuelva a activar la actualización de la pantalla y las alertasApplication.ScreenUpdating = TrueApplication.DisplayAlerts = TrueEnd Sub

Este código asume que los datos originales en filas se mantienen en una hoja de trabajo llamada "DataInRows"

Después de ejecutar el código, su hoja de trabajo se verá así:

Se ha eliminado el duplicado "Manzanas" de la columna E. El usuario está de vuelta 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.

Va a ayudar al desarrollo del sitio, compartir la página con sus amigos

wave wave wave wave wave