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.
