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 Sub
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:
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.