Cómo resaltar y eliminar duplicados en Excel usando código VBA

Existen muchas formas de encontrar duplicados en un rango de datos de Microsoft Excel, siendo la formato condicional una de las más utilizadas. Cuando la regla es VERDADERA, el formato se mantiene hasta que la condición sea FALSA o se elimine la regla. Sin embargo, a veces solo quieres echar un vistazo rápido o contar los duplicados, sin necesidad de aplicar un formato permanente. O, más razonablemente, los usuarios pueden no tener los conocimientos suficientes para aplicar una regla de formato condicional. En ambos casos, este artículo revisará un código VBA que destaca los duplicados en un rango de datos. También incluirá código para eliminar el resaltado de un rango de datos.

Estoy utilizando Microsoft 365 en un sistema Windows 10 de 64 bits, pero puedes utilizar versiones anteriores. Utiliza los archivos descargables .xlsm, .xls o .cls para obtener el código. Excel Online no admite macros. Este artículo asume que tienes habilidades básicas en Excel; sin embargo, incluso un principiante debería poder seguir las instrucciones con éxito.

Índice de Contenido
  1. Cómo utilizar el procedimiento VBA
  2. Utiliza los procedimientos
  3. Consideraciones a tener en cuenta

Cómo utilizar el procedimiento VBA

Antes de revisar los procedimientos, vale la pena señalar que, en cuanto al código, los dos procedimientos son casi idénticos. Podrías combinarlos en un solo procedimiento y pedir al usuario que identifique si la tarea es resaltar o eliminar el resaltado, pero eso requeriría un clic adicional cada vez que se ejecute el procedimiento. Al ejecutar los dos procedimientos se elimina ese clic adicional. Sin embargo, algunos elegirían combinarlos, por lo que vale la pena considerarlo.

El Listado A resalta los valores duplicados en un rango de datos. Después de declarar y definir variables, el código solicita al usuario que seleccione un rango. Luego de las comprobaciones en esa selección, el código resalta los duplicados y muestra el número de duplicados resaltados. El Listado B es similar pero elimina los resaltados y no muestra el recuento de duplicados.

HighlightDuplicates() establece un resaltado mediante la propiedad ColorIndex que se establece en 36, que es amarillo; El Listado B establece el mismo ajuste en 0, que significa sin color de relleno en absoluto. Si el rango tiene un color de relleno permanente, deberás adaptarlo en El Listado B utilizando ese mismo color de relleno en lugar de 0.

Enseñanza y Aprendizaje con Microsoft: Herramientas y Lecciones para Profesores de todos los Niveles

Listado A

Sub HighlightDuplicates()
    ' Resalta duplicados en rango seleccionado.
    
    Dim selRange As Range
    Dim curCell As Range
    Dim j As Integer

    ' Solicita al usuario que seleccione un rango. 
    ' Debe tener seleccionada la opción "Interrupción en errores no controlados".
    On Error Resume Next
    Set selRange = Application.InputBox( _
        Title:="Seleccionar rango", _
        Prompt:="Seleccione un rango para buscar valores duplicados.", _
        Type:=8)
    On Error GoTo 0
    
    ' Comprueba si se ha cancelado la selección.
    If selRange Is Nothing Then Exit Sub
    
    ' Comprueba si se ha seleccionado solo una celda.
    If selRange.Rows.Count = 1 Then
        MsgBox "Solo ha seleccionado una celda. " _
            & "Por favor, seleccione varias celdas contiguas " _
            & "en una única columna.", vbOKOnly
        Exit Sub
    End If
    
    ' Establece el contador en 0.
    j = 0
    
    ' Recorre el rango seleccionado por el usuario para resaltar los duplicados.
    For Each curCell In selRange
        If WorksheetFunction.CountIf(selRange, curCell.Value) > 1 Then
            curCell.Interior.ColorIndex = 36
            j = j + 1
        End If
    Next curCell
    
    j = j / 2
    
    MsgBox "Tienes " & j & " duplicados.", vbOKOnly
End Sub

Listado B

Sub DeleteDuplicates()
    ' Elimina el resaltado de los duplicados en un rango seleccionado.
    
    Dim selRange As Range
    Dim curCell As Range
    
    ' Solicita al usuario que seleccione un rango.
    ' Debe tener seleccionada la opción "Interrupción en errores no controlados".
    On Error Resume Next
    Set selRange = Application.InputBox( _
        Title:="Seleccionar rango", _
        Prompt:="Seleccione un rango para buscar valores duplicados.", _
        Type:=8)
    On Error GoTo 0
    
    ' Comprueba si se ha cancelado la selección.
    If selRange Is Nothing Then Exit Sub
    
    ' Comprueba si se ha seleccionado solo una celda.
    If selRange.Rows.Count = 1 Then
        MsgBox "Solo ha seleccionado una celda. " _
            & "Por favor, seleccione varias celdas contiguas " _
            & "en una única columna.", vbOKOnly
        Exit Sub
    End If
    
    ' Recorre el rango seleccionado por el usuario para eliminar el resaltado de los duplicados.
    For Each curCell In selRange
        If WorksheetFunction.CountIf(selRange, curCell.Value) > 1 Then
            curCell.Interior.ColorIndex = 0
        End If
    Next curCell
End Sub

Si estás utilizando una versión con cinta de opciones, asegúrate de guardar el libro como un archivo habilitado para macros para que el procedimiento pueda ejecutarse. Si estás utilizando una versión con menú, puedes omitir este paso.

Para introducir ambos procedimientos, presiona Alt + F11 para abrir el Editor de Visual Basic. En el Explorador de proyectos a la izquierda, selecciona ThisWorkbook para poder ejecutar el procedimiento en cualquier hoja. Puedes ingresar el código manualmente o importar el archivo .cls descargable. Además, la macro se encuentra en los archivos descargables .xlsm y .xls. Si ingresas el código manualmente, no pegues directamente desde esta página. En su lugar, copia el código en un editor de texto y luego pégalo en el módulo ThisWorkbook. De esta manera se eliminarán cualquier carácter extraño proveniente de la web que podría causar errores.

Utiliza los procedimientos

Después de ingresar los procedimientos, estás listo para utilizarlos de la siguiente manera:

  1. Haz clic en la pestaña Desarrollador.
  2. Haz clic en Macros en el grupo Código.
  3. En el cuadro de diálogo resultante, elige HighlightDuplicates() como se muestra en Figura A y haz clic en Ejecutar.
  4. Cuando se te solicite, selecciona B3:B9 como se muestra en Figura B y haz clic en Aceptar.
  5. Haz clic en Aceptar para cerrar el mensaje informativo que muestra el número de duplicados, como se muestra en Figura C.

Figura A

Guía de Examen de Certificación Lotus Notes: Desarrollo de Aplicaciones y Administración del Sistema

Figura B

Figura C

¡Eso es todo! Como puedes ver en Figura C, el procedimiento encontró dos duplicados. Esas cuatro celdas ahora están resaltadas en amarillo, lo que significa que dos valores tienen un duplicado: John y Doris. Observa que el código no distingue entre mayúsculas y minúsculas (Doris y doris).

Cómo gestionar eficazmente grandes volúmenes de correo electrónico

Las sentencias On Error capturan las pulsaciones de teclas en lugar de una selección de rango. El bucle For recorre cada celda en el rango seleccionado y aplica un resaltado cuando la expresión

WorksheetFunction.CountIf(selRange, curCell.Value) > 1

es VERDADERA, lo que significa que el valor actual ocurre más de una vez en el conjunto de datos. La función CONTARSI() es la misma que utilizarías al crear una regla de formato condicional. Lo último que hace el procedimiento es mostrar el número de valores duplicados, en este caso, dos.

A continuación, ejecuta DeleteDuplicates(), selecciona el mismo rango y el procedimiento eliminará rápidamente los resaltados. Ambos procedimientos verifican si se hizo clic en Cancelar y si se seleccionó un rango de una sola celda.

Consideraciones a tener en cuenta

Ambos procedimientos son bastante flexibles. Evalúan texto, números y fechas, incluso si están en el mismo rango de datos. Funcionan con múltiples columnas, evaluando todas las entradas en su totalidad. En otras palabras, el código encuentra duplicados tanto en la misma columna como en duplicados compartidos en varias columnas. El código ignora los espacios en blanco y no distingue entre mayúsculas y minúsculas.

Puedes hacer el proceso más dinámico capturando el color de relleno antes de aplicar el resaltado en El Listado A y guardándolo como una variable estática que mantenga su valor. El Listado B podría hacer referencia a esa variable y utilizarla para restablecer el color de relleno de la celda al eliminar el resaltado.

Integración de StarOffice: calendarios

Es poco probable que quieras pasar por todos esos pasos cada vez que desees ejecutar el procedimiento. En su lugar, agrega la macro a la Barra de acceso rápido. Para hacerlo, lee Cómo agregar macros de Office a la barra de acceso rápido para acceder rápidamente.

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Software, allí encontraras muchos artículos similares a Cómo resaltar y eliminar duplicados en Excel usando código VBA , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.