Tabla de contenido
El tutorial muestra cómo resaltar palabras duplicadas o cadenas de texto dentro de una celda utilizando VBA.
El formato condicional de Excel permite resaltar duplicados de todas las formas posibles que se le ocurran: con o sin la primera ocurrencia, en una sola columna o en varias columnas, celdas duplicadas consecutivas y filas enteras basadas en valores idénticos en una columna clave. Pero, como siempre, hay un "pero". Las reglas de formato condicional funcionan a nivel de celda, mientras que es posible que desee resaltar duplicadostexto en lugar de celdas enteras. Esto sólo puede hacerse con macros. Aunque no tenga experiencia con VBA, no se apresure a cerrar esta página. Aquí encontrará ejemplos de código listos para usar e instrucciones detalladas sobre cómo utilizarlos en sus hojas de cálculo.
Resaltar palabras duplicadas en una celda ignorando mayúsculas y minúsculas del texto
Este ejemplo muestra cómo sombrear palabras duplicadas o cadenas de texto dentro de una celda en color de fuente rojo como se muestra en la imagen de abajo. Tenga en cuenta que las letras minúsculas y mayúsculas se tratan como los mismos caracteres. Por ejemplo, naranja , NARANJA y Naranja se consideran la misma palabra.
El código de la macro es el siguiente
Public Sub HighlightDupesCaseInsensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Enter the delimiter that separates values in a cell" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, False ) Next End Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive AsBoolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIndex = wordIndex + 1 To UBound (words) If word =words(nextWordIndex) Then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End SubResaltar texto duplicado en una celda distinguiendo entre mayúsculas y minúsculas
En la mayoría de las situaciones, tendemos a ignorar las mayúsculas y minúsculas cuando trabajamos con entradas de texto en Excel. Sin embargo, en determinadas circunstancias, las mayúsculas y minúsculas sí importan. Por ejemplo, si se trata de identificadores, contraseñas u otros registros de ese tipo, las cadenas como 1-AA , 1-aa y 1-Aa no son duplicados y no deben resaltarse:
En este caso, utilice la siguiente versión del código:
Public Sub HighlightDupesCaseSensitive() Dim Cell As Range Dim Delimiter As String Delimiter = InputBox( "Enter the delimiter that separates values in a cell" , "Delimiter" , ", " ) For Each Cell In Application.Selection Call HighlightDupeWordsInCell(Cell, Delimiter, True ) Next End Sub HighlightDupeWordsInCell(Cell As Range, Optional Delimiter As String = " " , Optional CaseSensitive AsBoolean = True ) Dim text As String Dim words() As String Dim word As String Dim wordIndex, matchCount, positionInText As Integer If CaseSensitive Then words = Split(Cell.Value, Delimiter) Else words = Split(LCase(Cell.Value), Delimiter) End If For wordIndex = LBound (words) To UBound (words) - 1 word = words(wordIndex) matchCount = 0 For nextWordIndex = wordIndex + 1 To UBound (words) If word =words(nextWordIndex) Then matchCount = matchCount + 1 End If Next nextWordIndex If matchCount> 0 Then text = "" For Index = LBound (words) To UBound (words) text = text & words(Index) If (words(Index) = word) Then Cell.Characters(Len(text) - Len(word) + 1, Len(word)).Font.Color = vbRed End If text = text & Delimiter Next End If Next wordIndex End SubCómo utilizar las macros para resaltar palabras duplicadas en Excel
Si eres principiante en el uso de VBA, las siguientes instrucciones paso a paso te guiarán cómodamente. Los usuarios experimentados pueden simplemente elegir el enlace de descarga y saltarse el resto :)
Añada el código a su libro de trabajo
Empieza por insertar el código de la macro en tu libro de Excel. He aquí cómo:
- Abra el libro de trabajo en el que desea resaltar los duplicados.
- Pulse Alt + F11 para abrir el Editor de Visual Basic.
- En el panel izquierdo, haga clic con el botón derecho del ratón en EsteLibroDeTrabajo y seleccione Inserte > Módulo del menú contextual.
- Pegue el código en la ventana Código.
- Para conservar la macro para usos futuros, asegúrese de guardar su libro de trabajo como un archivo .xlsm habilitado para macros.
También puede descargar nuestro libro de trabajo de ejemplo y ejecutar la macro desde allí. El libro de trabajo de ejemplo contiene las siguientes macros:
- HighlightDupesCaseInsensitive - sombrea duplicados dentro de una celda ignorando las mayúsculas y minúsculas.
- HighlightDupesCaseSensitive - resalta los duplicados en una celda teniendo en cuenta las letras mayúsculas y minúsculas.
Para más información, consulte Cómo insertar código VBA en Excel.
Ejecutar la macro
Con el código añadido a su propio libro de trabajo o nuestro archivo de ejemplo descargado y abierto, ejecute la macro de esta manera:
- En la hoja de cálculo, seleccione las celdas en las que desea resaltar el texto duplicado. Puede tratarse de un rango o de varios rangos no adyacentes.
- Pulse Alt + F8 .
- Seleccione la macro que le interese y haga clic en Ejecutar .
- La macro le pedirá que especifique el delimitador que separa los valores en las celdas seleccionadas. El delimitador preestablecido (una coma y un espacio en nuestro caso) aparecerá automáticamente en el cuadro de entrada. Dependiendo de sus necesidades, puede dejar el delimitador predeterminado o escribir uno diferente y, a continuación, hacer clic en Aceptar.
Un momento después, todas las cadenas duplicadas en las celdas seleccionadas aparecerán sombreadas en color rojo (o en el color de fuente que haya establecido en su código).
Consejo: para eliminar duplicados dentro de una celda, puede utilizar Eliminar subcadenas duplicadas, una de las muchas herramientas que ahorran tiempo incluidas en nuestra Ultimate Suite.
Cómo adaptar el código a sus necesidades
Con estas notas de uso y unos conocimientos muy básicos de VBA (o simplemente siguiendo atentamente las instrucciones que figuran a continuación), podrá modificar fácilmente los códigos para adaptarlos exactamente a sus necesidades.
Colocar en el mismo módulo
Como puede observar, ambas macros ( HighlightDupesCaseSensitive y HighlightDupesCaseInsensitive ) llamar al HighlightDupeWordsInCell La diferencia entre las dos macros anteriores estriba únicamente en el tercer parámetro (CaseSensitive) que se pasa a dicha función.
Para la búsqueda sensible a mayúsculas y minúsculas, se establece en TRUE:
Llamar a HighlightDupeWordsInCell(Celda, Delimitador, True)
Para la búsqueda sin distinción entre mayúsculas y minúsculas, se establece en FALSE:
Llamar a HighlightDupeWordsInCell(Celda, Delimitador, Falso)
Para que las macros funcionen, el código de la carpeta HighlightDupeWordsInCell debe colocarse en el mismo módulo que las macros.
Delimitador
Cuando se ejecute, la macro le pedirá que especifique el delimitador que separa las palabras/cadenas en las celdas seleccionadas. El delimitador por defecto es una coma y un espacio (", ") y está preestablecido en el InputBox:
Delimitador = InputBox("Especifique el delimitador que separa los valores en una celda", "Delimitador", ", ")
En su código, puede utilizar cualquier otro carácter como delimitador predefinido.
Color
Por defecto, el HighlightDupeWordsInCell sombrea los duplicados en rojo. El color se define en esta línea:
Cell.Characters(positionInText, Len(word)).Font.Color = vbRed
Aquí, vbRed es una especie de constante de color de VBA. Para mostrar los duplicados en un color diferente, puede reemplazar vbRed con otra constante como vbGreen, vbYellow, vbBlue, etc. T a lista de constantes de color admitidas puede consultarse aquí.
Así es como se resaltan las palabras duplicadas en las celdas de Excel. Te doy las gracias por leer y ¡espero verte en nuestro blog la semana que viene!
Descargas disponibles
Ejemplos de código para resaltar duplicados en una celda (archivo .xlsm)
Ultimate Suite 14 días versión totalmente funcional (archivo .exe)