Resaltar filas mientras se escribe usando Formato condicional, VBA y macros en Excel – PARTE 1
En nuestro proyecto anterior llamado Filtro rápido en Excel, vimos cómo filtrar filas de un rango al momento de escribir valores en un Cuadro de texto (TextBox), es decir, filtrar de manera dinámica.
Dignora, una comprometida suscriptora de nuestro canal me hizo una pregunta muy interesante. La pregunta fue:
Gracias Profesor. He aplicado este ejemplo y es fabuloso. En otra necesidad algo parecido: Si al colocar un texto en ese textbox se pinten las celdas que contienen esos valores. Tiene algo parecido que me pueda recomendar???. Agradezco su dedicación y excelentes contenidos
La idea me gustó y decidí hacer este tutorial y grabar un video sobre el tema. Al principio me pareció un tema sencillo, pero al ir grabando el video me di cuenta que se le podía sacar mucho provecho al tema y decidí grabar el video en dos partes.
Resaltar filas usando Formato condicional
Antes de meternos en macros, te diré cómo formatear filas completas de un rango siempre y cuando cumplan con un criterio: usaremos la función ENCONTRAR para validar si una cadena de texto se encuentra dentro de las celdas de la columna Cargo. Seguimos los siguientes pasos para aplicar el Formato condicional en el rango:
- Seleccionamos el rango.
- Nos vamos a la pestaña Inicio > Formato condicional > Nueva regla.
- Elegimos la opción Utilice una fórmula que determine las celdas para aplicar formato.
- Ingresamos la siguiente fórmula.
=ENCONTRAR(MAYUSC(“C”),MAYUSC($D10))
Ver Video Resaltar filas en Excel mientras se escribe
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
PARTE 2
Si el texto se encuentra en algunas de las celdas de la columna Cargo, entonces se resaltarán las filas completas.
Figura 1. Se resaltan las filas que en la columna Cargo contengan la letra “c”.
Resaltar filas mientras se escribe en un TextBox usando VBA y macros
Usando formato condicional es verdaderamente útil para colorear el fondo de las filas. Ahora lo que haremos es ingresar un Cuadro de texto (TextBox) en la hoja que nos servirá para aplicar formato condicional cada que se escribe texto en el TextBox, haciéndolo de manera dinámica, usando VBA y macros.
Figura 2. Usaremos un Cuadro de texto para ingresar texto y resaltar filas con formato condicional.
Usaremos el evento Change del TextBox para que se ejecute una macro que aplica Formato condicional en el rango cada vez que se detecte un cambio de texto. Si el Cuadro de texto queda vacío, se eliminan todas las reglas de Formato condicional.
- Nos vamos a la pestaña Programador > Modo diseño.
- Damos doble clic en el TextBox y se crea el evento TextBox1_Change.
- Ingresamos la macro que aplicará una regla de Formato condicional al rango.
Figura 3. Se resaltan las filas completas al momento de ingresar texto en el TextBox.
Código VBA de la macro
El siguiente código VBA se usará en el evento TextBox1_Change y se ejecutará cada que cambie el contenido del TextBox.
'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo ' Option Explicit Private Sub TextBox1_Change() Dim Valor As String Dim strFormula As String Dim Rango1 As Range Dim Rango2 As Range Valor = Hoja1.TextBox1.Value strFormula = "=ENCONTRAR(MAYUSC(""" & UCase(Valor) & """),MAYUSC($D10))" Set Rango1 = ThisWorkbook.Sheets("Hoja1").Range("A9").CurrentRegion Set Rango2 = Rango1.Offset(1, 0).Resize(Rango1.Rows.Count - 1, Rango1.Columns.Count) If Hoja1.TextBox1.Value = "" Then Cells.FormatConditions.Delete: Exit Sub Cells.FormatConditions.Delete Rango2.FormatConditions.Add Type:=xlExpression, Formula1:=strFormula With Rango2.FormatConditions(1).Interior .ColorIndex = 35 End With End Sub
Descarga el archivo de ejemplo
Resaltar filas mientras se escribe usando VBA y formato condicional – EXCELeINFO.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.