Hoy veremos un uso diferente del método .Find, enfocándolo a la búsqueda por formato.
La idea es por tanto localizar dentro de un rango determinado qué celdas responden a un formato dado; en nuestro ejemplo aquellas con un color de relleno amarillo.
Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:
Por cada coincidencia del color de relleno aparecerá un MsgBox.
Las claves de este procedimiento residen en tres puntos.
El primero en la propiedad SearchFormat como TRUE, dentro del método .Find
El segundo en añadir una nueva búsqueda (.Find) dentro del bucle Doo...Loop para localizar las celdas siguientes...
El tercero es emplear .FindFormat para fijar la búsqueda por formato!!.
La idea es por tanto localizar dentro de un rango determinado qué celdas responden a un formato dado; en nuestro ejemplo aquellas con un color de relleno amarillo.
Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:
Sub EncontrarFormato() 'limpiamos cualquier anterior búsqueda por formato 'y aplicamos el color de relleno a buscar (amarillo) With Application.FindFormat .Clear .Interior.Color = 65535 End With 'localizamos la primera coincidencia por color de relleno Dim CeldaPrimeraCoincidencia As Range 'buscamos en el rango definido A1:H25 empezando por A1.... Set CeldaPrimeraCoincidencia = Range("A1:H20").Find(What:="", _ After:=Range("A1"), _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ SearchFormat:=True) 'la clave es poner TRUE en SearchFormat... 'si encontramos algo, seguimos la búsqueda... If Not CeldaPrimeraCoincidencia Is Nothing Then Dim CeldaActual As Range Set CeldaActual = CeldaPrimeraCoincidencia 'entramos en el bucle de búsqueda Do 'sacamos un MsgBox que muestre la dirección de la celda MsgBox CeldaActual.Address 'empezamos una nueva búsqueda del formato 'a partir de la celda anterior.. Set CeldaActual = Range("A1:H20").Find(What:="", _ After:=CeldaActual, _ LookIn:=xlFormulas, _ LookAt:=xlPart, _ SearchOrder:=xlByRows, _ SearchDirection:=xlNext, _ MatchCase:=False, _ SearchFormat:=True) Loop Until CeldaActual.Address = CeldaPrimeraCoincidencia.Address End If End Sub
Por cada coincidencia del color de relleno aparecerá un MsgBox.
Las claves de este procedimiento residen en tres puntos.
El primero en la propiedad SearchFormat como TRUE, dentro del método .Find
El segundo en añadir una nueva búsqueda (.Find) dentro del bucle Doo...Loop para localizar las celdas siguientes...
El tercero es emplear .FindFormat para fijar la búsqueda por formato!!.
Qué bueno!!! Intente crear algo parecido para tres colores hace tiempo, pero no soy muy buena en ese área y no me salio bien al final. Lo tendré en cuenta en el futuro! Muchas gracias!
ResponderEliminar