Home > Excel > Zegarek na „warunkowym”

Zegarek na „warunkowym”

Nie, nie, wbrew temu co może sugerować tytuł artykułu nie będę tu poddawał niczego resocjalizacji 🙂 Otóż, chciałbym zwrócić uwagę na siłę jaką niesie za sobą formatowanie warunkowe w Excelu. O samym formatowaniu warunkowym można by wiele artykułów napisać, ja pokażę na przykładzie jak za pomocą formatowania warunkowego można zrobić coś, co większość mniej lub bardziej ogarniętych „excelowców” próbowałoby (i na pewno z pozytywnym skutkiem) zrobić w VBA. Nie przeciągając powiem, że chodzi o zegarek wyświetlany (i oczywiście „chodzący” 🙂 ) na arkuszu. Wielu czytelników pewnie żachnie się teraz – „Ha, banał, wystarczy funkcja arkusza Teraz z odpowiednim formatowaniem komórki do formatu czasowego!„. W porządku, ale ja chcę zaprezentować zupełnie inny zegarek…Wygląd zegarka można zobaczyć na poniższej  animacji.

Animacja zegarka w Excelu

Jak działa taki zegarek? Otóż poszczególne składowe czasu są podane w oddzielnych kolumnach – godzina w kolumnach BC, minuty w kolumnach EF i sekundy odpowiednio w kolumnach HI. Dla przedstawionego przykładu jest to godzina około 15:34:xx (sekund oczywiście nie podaję, bo się ciągle zmieniają i nie mogłem zauważyć 😉 ). Poszczególne cyferki w trakcie zmiany aktualnego czasu jakby „spadają”. Teraz mała dygresja i wyjaśnienie skąd pomysł na taką prezentację czasu? Przyznam się szczerze, że ten arkusz powstał przy okazji projektowania przeze mnie elektronicznego zegarka, gdzie właśnie tarcza i sam sposób zachowania się cyferek wyglądały podobnie. Oczywiście w wykonaniu elektronicznym cyferki „aktywne” były podświetlane przez diody LED, zaś pozostałych cyfr nie było widać. Efekt wizualny jest piorunujący, zwłaszcza w ciemnych pomieszczeniach lub w nocy (postaram się zrobić zdjęcia i zamieścić na stronie filmik z działania zegara).

Ale wracajmy do tematu, czyli naszego zegarka. Pewnie większość z Was myśli, że wszystko zostało zrobione w VBA? Nic bardziej mylnego 😀 :D. Cały kod wykorzystywany przez zegarek zamieszczam poniżej:

Option Explicit
Dim CykCyk
 
Sub zegarekstart()
  ThisWorkbook.Sheets(1).Range("B1").Calculate
  CykCyk = Now + TimeValue("00:00:01")
  Application.OnTime CykCyk, "zegarekstart"
End Sub
Sub zegarekstop()
    On Error Resume Next
    Application.OnTime CykCyk, "zegarekstart", , False
End Sub

Jak widać całość składa się tylko z dwóch procedur, których zadaniem jest włączanie lub wyłączanie zegarka. Wyjaśnień wymaga zapewne procedura zegarekstart – otóż zadaniem jej jest przeliczenie komórki B1 w pierwszym arkuszu i zmiana wartości zmiennej CykCyk tak, by wskazywała aktualny czas powiększony o 1 sekundę i ustawiała parametry do obsługi zdarzenia  OnTime (jest to wywołanie określonej procedury/makra o zdefiniowanej jako parametr porze – po szczegóły odsyłam do pomocy Excela lub do internetu). W naszym wypadku procedura wymusza po nadejściu czasu CykCyk ustawienie nowego czasu (czyli następnej sekundy) i ustawienie jaka wtedy procedura ma się wykonać. A jaka się wykona? Tak! Dokładnie ta sama procedura 🙂 – która znów ustawi nowy czas i znów każe siebie samą wykonać za sekundę. I tak w kółko… Tyle o kodzie VBA. A co z tym formatowaniem warunkowym?

Za „ruch” cyferek odpowiada odpowiednio ustawione formatowanie warunkowe.  Na początek ustalimy formatowanie „nieczynnych” cyferek. Zaznaczamy odpowiednie komórki – czyli w przypadku naszego przykładu są to obszary B3:C12, E3:F12 i H3:I12. Wybieramy tło komórek w kolorze czarnym, czcionki w kolorze szarym i pogrubione. Teraz zajmiemy się ożywieniem zegarka. Dla każdej z kolumn trzeba ustawić odrębne formatowanie. Zaczniemy od dziesiątek godzin. Zaznaczamy obszar B3:B12 i wybieramy z menu Format->Formatowanie warunkowe. Zmieniamy teraz warunek z „Wartość komórki jest” na „Formuła jest” i w polu formuły wpisujemy formułkę =B3=WARTOŚĆ(LEWY(TEKST(TERAZ();”gg”);1))„. Ilustruje to poniższy obrazek:

Co robi formuła? Funkcja Teraz pobiera aktualny czas systemowy (w formacie daty), funkcja Tekst „wyciąga” tylko godziny i przy okazji przekształca je w tekst (odkrywcze 😀 ) zaś funkcja Lewy z tego tekstu pobiera tylko jeden znak od lewej strony czyli dziesiątki godzin. Na koniec konwertujemy  znak na wartość…  i gotowe.

Żeby nie przedłużać tego opisu dla pozostałych kolumn podaje rysunki jak ustawić formuły w formatowaniu warunkowym. Pamięetajcie, że trzeba najpierw zaznaczyć stosowny obszar a później ustawić formatowanie.

– dla obszaru C3:C12 (jednostki godzin):

– dla obszaru E3:E12 (dziesiątki minut):

– dla obszaru F3:F12 (jednostki minut):

– dla obszaru H3:H12 (dziesiątki sekund):

– dla obszaru I3:I12 (jednostki sekund):

To tyle o formatowaniu. Teraz wystarczy dodać dwa przyciski na arkuszu z podpiętymi naszymi makrami zegarekstart() i zegarekstop() i gotowe 🙂

Plik źródłowy do artykułu:

  Zegarek cyferkowy (42,5 KiB, 1 072 pobrań)

Krzysztof


Drukuj wpis Wyślij ten artykuł
  1. Sierpień 2nd, 2010 at 06:38 | #1

    Cholera, to wydaje się takie proste, jeżeli się nad tym zastanowisz.

  2. piotrek
    Listopad 21st, 2012 at 00:18 | #2

    Świetny artykuł.

  1. Brak jeszcze trackbacków