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.
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 NivelesListado 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:
- Haz clic en la pestaña Desarrollador.
- Haz clic en Macros en el grupo Código.
- En el cuadro de diálogo resultante, elige HighlightDuplicates() como se muestra en Figura A y haz clic en Ejecutar.
- Cuando se te solicite, selecciona B3:B9 como se muestra en Figura B y haz clic en Aceptar.
- 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 SistemaFigura 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ónicoLas 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: calendariosEs 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