martes, 14 de junio de 2016

VBA: Encontrar coincidencias de formato.

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.

VBA: Encontrar coincidencias de formato.



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!!.

1 comentario:

  1. 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