A partir de Excel 2007 se incorpora la opción "Quitar duplicados", al igual que otras herramientas disponibles en Excel, esta opción también se puede utilizar por medio de VBA.
En VBA el comando correspondiente a la opción "Quitar duplicados" es RemoveDuplicates, veamos como se puede hacer uso de esta opción
Sintaxis de RemoveDuplicates
RemoveDuplicates (Columnas , Encabezado)
Columnas: Es el primer parámetro de RemoveDuplicates, es obligatorio, y por medio de este parámetro se puede especificar la o las columnas en base a las cuales de debe considerar la eliminación de los duplicados.
Si se desea indicar el uso de una columna se puede colocar solo el número correspondiente:
Columns:=2
En cambio si se desea indicar una lista de columnas a ser consideradas se puede utilizar array:
Columns:=Array(1, 2)
En ambos casos los números empleados están función del rango seleccionado, y no en función de la hoja completa.
Encabezado: Este segundo parámetro es opcional, los valores posibles son:
xlYes; si se usa este parámetro se esta especificando que el rango seleccionado tiene un encabezado en la primera fila
xlNo; este es el parámetro por defecto, y sirve para indicar que el rango seleccionado no tiene encabezado en la primera fila.
xlGuess; esta tercera opción de deja a Excel la capacidad de intentar identificar si existe encabezado o no.
Ejemplo de RemoveDuplicates en VBA
Veamos el siguiente conjunto de datos en los que se aplicará RemoveDuplicates.
Si observamos las tres columnas, notaremos que como existen nombres distintos en todas las filas, no existen duplicados, en cambio si por ejemplo nos fijamos solo en las dos primeras columnas, entonces si existen duplicados como en el caso de la fila 4 y fila 5.
Ejemplo de código VBA con RemoveDuplicates
Sub ejemploRemoveDuplicates()
ult = Cells(Rows.Count, 3).End(xlUp).Row
ActiveSheet.Range("C3:E" & ult).RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub
En este ejemplo primero empleamos el código de la última fila en VBA a fin de poder identificar en la siguiente línea hasta donde existen datos a ser considerados en la eliminación de duplicados.
Tengamos en cuenta, en relación a RemoveDuplicates en VBA, que la eliminación se hace desde la fila inferior a la superior, por ejemplo en el caso de la fila 4 y 5, la fila que se procede a eliminar es la fila 5.
Si por el contrario, en lugar de eliminar una fila, se desea realizar un acción distinta, en esos casos sería útil el siguiente artículo: quitar duplicados en VBA, en el que por medio del uso del For en VBA y Countif en VBA (el equivalente al contar.si) se detectan los elementos duplicados.
Otros ejemplos de RemoveDuplicates en VBA
Remover duplicados en base al rango usado en una hoja.
Sub ejemplo2()
ActiveSheet.UsedRange.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub
En lo personal no suelo emplear el "ejemplo2", debido a que no se tiene un control adecuado del rango a ser considerado en la eliminación.
Remover duplicados en base a una tabla
Sub ejemplo3()
ActiveSheet.ListObjects("Tabla1").DataBodyRange.RemoveDuplicates Columns:=Array(1, 2), Header:=xlYes
End Sub
Para poder ejecutar este ejemplo es necesario que exista la "Tabla1", o usar el nombre de tabla sobre el cual se quiera quitar los duplicados.