Feb 08 2010

Wtorki z VBA cz. 16 – Zaznaczanie komórek o określonym formacie

Posted by Marcin

Dziś zaprezentuję Wam jak manipulować w prosty sposób komórkami arkusza, które są porozrzucane w różnych miejscach w arkuszu. Wykorzystamy do tego metodę FindFormat, którą zaprzęgniemy do znalezienia np. pogrubionych komórek, oraz znaną Wam już funkcję Union do stworzenia kontenera dla naszych znalezionych komórek. Operacje na takim obiekcie (zawierającym kilka innych obiektów) są tak proste jak na jednej komórce!

Plan naszego makra jest dość prosty: określamy czego szukamy (pogrubionych komórek), znajdujemy pierwszą komórkę, która spełnia nasze kryteria, następnie szukamy kolejnych, sprawdzając czy każda nowa komórka nie jest przypadkiem tą pierwszą - w tym wypadku oznaczałoby to, że Excel przeszukał cały obszar i rozpoczął poszukiwanie od początku. Każdą ze znalezionych komórek będziemy dodawać do naszego kontenera (PogrubioneKomorki) za pomocą funkcji Union. Oto kod naszego makra:

 
Sub RozrzuconeKomorki()
 
Dim PierwszaKomorka As Range
Dim ZnalezionaKomorka As Range
Dim PogrubioneKomorki As Range  'Nasz kontener
z pogrubionymi komórkami
 
'Określamy jakiego rodzaju formatowania szukamy
Application.FindFormat.Font.Bold = True
 
'Szukam pierwszej komorki
Set PierwszaKomorka = ActiveSheet.UsedRange.Find _
(what:="", searchformat:=True)
If PierwszaKomorka Is Nothing Then
    MsgBox "Nie znaleziono pogrubionych komórek"
    Exit Sub
End If
 
'Inicjacja naszego kontenera
Set PogrubioneKomorki = PierwszaKomorka
Set ZnalezionaKomorka = PierwszaKomorka
 
'Pętla aż dojdziemy do końca i znajdziemy ponownie
pierwsza komorke
Do
    Set ZnalezionaKomorka = ActiveSheet.UsedRange.Find _
(after:=ZnalezionaKomorka, what:="", searchformat:=True)
    If ZnalezionaKomorka Is Nothing Then Exit Do
    Set PogrubioneKomorki = Union(ZnalezionaKomorka,
PogrubioneKomorki)
    If ZnalezionaKomorka.Address = PierwszaKomorka.Address
Then Exit Do
Loop
 
PogrubioneKomorki.Select
MsgBox "Znaleziono " & PogrubioneKomorki.Count &
" komórek"
 
End Sub
 

Argument What metody Find jest ustawiony na pusty łańcuch (""), ponieważ wyszukujemy komórki tylko o określonym formacie1, a nie zawartości. Nic nie stoi jednak na przeszkodzie, aby wyszukiwać komórki spełniające kryteria w odniesieniu do ich zawartości.

Najważniejsze jednak, że nasz kontener, czyli zmienna obiektowa typu Range (PogrubioneKomorki), mimo że składa się z wielu rozłącznych komórek, zachowuje się jak jedna komórka lub spójny zakres. Możemy zrobić z nim(i) co nam się podoba: zaznaczyć, zmienić format, zliczyć, skopiować, przenieść, wykonać operacje na wartościach... itd.

1 Uwaga: Przy użyciu pokazanych tutaj metod nie odnajdziemy niestety komórek, których format został określony poprzez formatowanie warunkowe.

Powiązane artykuły:

Leave a Reply