Al hilo del post anterior (Búscar en Excel por formato) desarrollaremos hoy un proceso equivalente con programación...
La ventaja de emplear macros es que podemos recuperar las posiciones de las celdas para cualquier acción posterior.
Partimos de la misma hoja que el ejemplo anterior:
La clave de esta búsqueda es la propiedad .FindFormat, que nos habilita la búsqueda por formato de celda...
Insertamos el siguiente código dentro de un módulo estándar del explorador de proyectos del Editor de VB:
Al emplear .FindFormat no podemos emplear la propiedad .Next habitual en búsquedas por contenido, motivo por el cual, debemos aplicar un segundo método .Find igual al primero.. que replicaría la acción de 'buscar siguiente'.
Al ejecutar nuestra macro obtenemos:
La ventaja de emplear macros es que podemos recuperar las posiciones de las celdas para cualquier acción posterior.
Partimos de la misma hoja que el ejemplo anterior:
La clave de esta búsqueda es la propiedad .FindFormat, que nos habilita la búsqueda por formato de celda...
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:= 65535)
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:H20 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...
Set rIgualFormato = Nothing
If Not CeldaPrimeraCoincidencia Is Nothing Then
Dim CeldaActual As Range
Set CeldaActual = CeldaPrimeraCoincidencia
'entramos en el bucle de búsqueda
Do
'componemos un rango con las celdas de igual formato
If rIgualFormato Is Nothing Then
Set rIgualFormato = CeldaActual
Else
Set rIgualFormato = Union(rIgualFormato, CeldaActual)
End If
'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
'sacamos un Mensaje con el listado de celdas...
MsgBox rIgualFormato.Address
'y las dejamos seleccionadas
rIgualFormato.Select
End SubAl emplear .FindFormat no podemos emplear la propiedad .Next habitual en búsquedas por contenido, motivo por el cual, debemos aplicar un segundo método .Find igual al primero.. que replicaría la acción de 'buscar siguiente'.
Al ejecutar nuestra macro obtenemos:




No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.