Ícono del sitio Formulas Excel

Eliminar duplicados con macros en excel

El tema de eliminar duplicados con macros en excel se vuelve muy relevante y necesario para todos los usuarios que manejan grandes bases de datos y de pronto se dan cuenta que algunos de sus registros están duplicados, un ejemplo de esto seria una base de datos de contactos, control de clientes, control de proveedores, etc.

Esto de eliminar duplicados con macros también se puede aplicar para bases de datos donde se registran ventas, compras, etc… esto con el fin de obtener una lista única de los clientes, proveedores con los que se han realizado operaciones.

Excel ya trae una opción para quitar duplicados de una tabla de datos, esa opcion esta en el menú datos/ quitar duplicados.

Esa es una excelente opción, pero tiene un detalle que la hace inútil en ciertos casos, un ejemplo seria cuando se aplica en una tabla donde los registros no son idénticos en todas las columnas, si un solo carácter en una columna es diferente a los otros registros, ese registro ya no es considerado como duplicado.

En ese caso es necesario programar una macro para eliminar los registros duplicados, la idea es que esa macro haga un recorrido de la tabla desde una sola columna, debe contar cuantas veces aparece el dato seleccionado dentro de esa columna, si el dato seleccionado esta mas de una vez, deberá eliminar la fila completa, si esta solo una vez, deberá seleccionar la siguiente fila y así hasta terminar con la tabla y finalmente deberá quedar depurada con ese proceso.

Macro para eliminar duplicados en excel

Sub eliminadup()
    'se definen variables
    Dim ncolum, filainicio, filafin As Integer
    Dim rangoconteo As String
    'se da valor a la variable numero de columna de búsqueda
    ncolum = Application.InputBox("Ingresar numero de columna guia..", "Columna", 1, Type:=1)
    'valor de la variable fila inicial
    filainicio = Application.InputBox("Ingresar numero de fila inicial..", "Fila Inicial", 2,     Type:=1)
    'valor de la variable ultima fila
    filafin = Application.InputBox("Ingresar numero de la ultima fila..", "Ultima Fila", 10,     Type:=1)
    'se define el rango donde se busca el dato para el conteo
    rangoconteo = Range(Cells(filainicio, ncolum), Cells(filafin, ncolum)).Address
    'seleccionar la primera celda para conteo
    Cells(filainicio, ncolum).Select
    'se inicia el recorrido de la hoja para contar y eliminar filas
    For i = 1 To filafin
        'se cuenta la cantidad de veces que esta el dato seleccionado dentro de la columna
        conteo = Application.CountIf(Range(rangoconteo), ActiveCell)
        'si el conteo es mayor a 1, se elimina la fila actual
        If conteo > 1 Then
            Selection.EntireRow.Delete
            i = i - 1
            'si el conteo es 1, se cambia la selección a la siguiente fila
        Else
            Selection.Offset(1).Select
        End If
    Next i
    'fin del ciclo

End Sub

En esa versión de la macro el usuario debe indicar el numero de columna que se usara como guía para buscar duplicados, es decir, si en esa columna hay datos duplicados se eliminan dejando solo uno de ellos, también se debe indicar numero de fila inicial y final.

Esta es una versión mas simple que realiza el proceso en un rango especificado en la misma macro.

Sub elimina()
    Range("c2").Select
    Do While ActiveCell.Value <> ""
        conteo = Application.CountIf(Range("c2:c1000"), ActiveCell)
        If conteo > 1 Then
            Selection.EntireRow.Delete
            i = i - 1
        Else
            Selection.Offset(1).Select
        End If
    Loop
End Sub

Video: Eliminar duplicados con macros en excel. 

Si observamos en el código de la macro, lo importante es primero diseñar la estructura de lo que debe suceder para que se haga el trabajo deseado, en este caso primero hemos puesto los comentarios que indican ese proceso y en base a ello se desarrolla el código que finalmente hace la tarea.

En programación es importante pensar de manera lógica en la mayoría de los casos, pero también es importante el pensamiento lateral, no todo se da de de la manera mas obvia, pero lo mas importante siempre, es tener presente la información relevante o la materia prima necesaria para hacer aquella tarea, por ejemplo, si quieres hacer una limonada, que es lo mas importante que se requiere para poder hacerla…?

En este caso de eliminar duplicados con macros en excel, aplica lo mismo, lo mas importante es la columna que se elije para hacer el conteo, si observamos, una vez elegida esa columna, la macro hace el recorrido y el conteo, pero jamas toma en cuenta las otras columnas a la hora de eliminar o dejar las filas, aunque de ser necesario si puedes tomar en cuenta las otras columnas.

Por otro lado, en este caso se ha elegido eliminar los registros duplicados, pero igual podrías hacer otra cosa con esos registros, por ejemplo, podrías poner un color diferente al texto o cambiar el color de fondo de las celdas, pero eso lo veremos en otra ocasión.

Salir de la versión móvil