Instrukcja If Then

Przykłady opisane w tej lekcji dostępne są w arkuszu Excela: VBA.xls, tylko ich samodzielne przerobienie daje gwarancję zapamiętania tej lekcji.

Przykłady dla wszystkich lekcji szkolenia Excel 2003: ExcelSzkolenie.pl Cwiczenia Excel 2003.zip

 

Przykład 1.

(Arkusz: ‘If Then’)

 

Dzięki wiedzy zdobytej w lekcji opisującej nagrywanie makr możemy w prosty sposób nagrać makro, które wyłącza linie siatki, po nagraniu takiego makra możemy je przypisać do wcześniej dodanej ikony (lekcja Zmiany w menu i własne ikony)

Możemy też nagrać makro, które włącza linie siatki i także przypisać je do nowo dodanej ikony.

Ale czy nie byłoby wygodniej przygotować makro, które włącza linie siatki, jeśli są wyłączone i wyłącza je, jeśli są włączone?

 

Aby to zrobić zarejestrujemy nowe makro.

Wprowadzamy nazwę, np. Linie_Siatki_Wlacz_i_Wylacz. Makro zapisujemy w Skoroszycie makr osobistych. Klikamy OK.

 

 

Wyłączamy Linie siatki (Menu: Narzędzia → Opcje, karta: Widok) i klikamy OK.

Kręcimy raz pokrętłem myszy w dół.

Ponownie wchodzimy do Menu: Narzędzia → Opcje, karta: Widok i włączamy Linie siatki.

 

 

Aby sprawdzić, jaki kod makra został zarejestrowany wchodzimy do Visual Basic for Applications (Alt+F11) i znajdujemy je odpowiednim module w pliku PERSONAL.XLS.

To, w którym module makro zostanie zarejestrowane zależy od tego ile modułów wcześniej posiadaliśmy w tym pliku.

 

 

Kod makra jest następujący:

 

Sub Linie_Siatki_Wlacz_i_Wylacz()

'

' Linie_Siatki_Wlacz_i_Wylacz Makro

' Makro zarejestrowane 2008-02-20, autor szypersp

'

 

'

    ActiveWindow.DisplayGridlines = False

    ActiveWindow.SmallScroll Down:=9

    ActiveWindow.DisplayGridlines = True

End Sub

 

Komenda: Sub jest oznaczeniem początku makra.

 

Linie_Siatki_Wlacz_i_Wylacz jest nazwą makra

 

() oznacza, że makro nie pobiera danych zewnętrznych, wszystkie proste makra nie pobierają danych zewnętrznych.

 

Linie rozpoczynające się od symbolu apostrofa ' to komentarz, automatycznie Excel dodaje 5 takich linii, w przypadku krótkich makr są one zbędne i najlepiej jest je od razu skasować. Linie komentarza są wyświetlane zieloną czcionką i podczas wykonywania makra są pomijane przez komputer. Służą jedynie do dopisywanie komentarzy dla samego siebie lub innej osoby, która będzie edytować dane makro, np jaki informację jakie operacje powinna wykonywać dana część makra.

 

Komenda: ActiveWindow.DisplayGridlines = False → wyłącza linie siatki

 

Komenda: ActiveWindow.SmallScroll Down:=9 → powoduje przesunięcie ekranu w dół, podczas nagrywania makra pokręciliśmy gałką przewijania w dół i zostało to nagrane. Komenda ta jest zupełnie zbędna i możemy ją od razu skasować.

 

Komenda: ActiveWindow.DisplayGridlines = True → włącza linie siatki

 

Komenda: End Sub → jest oznaczeniem końca makra

 

 

 

Po wykasowaniu zbędnych linii nasze makro wygląda następująco:

 

 

Sub Linie_Siatki_Wlacz_i_Wylacz()

    ActiveWindow.DisplayGridlines = False

    ActiveWindow.DisplayGridlines = True

End Sub

 

 

Jednak wciąż nie ma takiej funkcjonalności jaką zaplanowaliśmy. Aby ją uzyskać posłużymy się instrukcją If-Then.

Instrukcja ta w swojej składni jest podobna do funkcji Jeżeli dostępnej w Excelu:

 

If [warunek] Then [działanie jeśli prawda] Else [działanie jeśli fałsz]

 

Część zaczynająca się od Else jest opcjonalna jeżeli interesuje nas tylko jeden warunek nie musimy z niej korzystać.

 

W naszym przykładzie wystarczy już tylko połączyć nasze makro z konstrukcją If-Then

 

Sub Linie_Siatki_Wlacz_i_Wylacz()

If ActiveWindow.DisplayGridlines = False Then ActiveWindow.DisplayGridlines = True Else: ActiveWindow.DisplayGridlines = False

End Sub

                                   

Cała konstrukcja If-Then mogłaby być zapisana w jednej linijce, ale aby była bardziej przejrzysta poniżej użyłem przejścia do kolejnej linii, którym w VBA jest spacja i dolny myślnik, czyli ‘ _’.

 

 

Po wprowadzeniu tych zmian, makro jest gotowe i możemy je przypisać do ikony na ekranie.

 

 

 

Przykład 2.

(Arkusz: ‘If Then’)

 

Funkcja if umożliwia wykonanie większej ilości operacji. W takim przypadku należy użyć nieco innej składni, w której największą zmianą jest zakończenie funkcji If komendą End If.

 

If warunek Then

        [polecenia jeżeli warunek jest spełniony]

        [polecenia jeżeli warunek jest spełniony]

Else

        [polecenia jeżeli warunek nie jest spełniony]

        [polecenia jeżeli warunek nie jest spełniony]

End If

 

W poniższym przykładzie makro wykorzystuje wyżej pokazaną składnie.

Funkcja isNumeric sprawdza czy komórka A2 zawiera liczbę, jeśli tak to w komórce B2 wprowadzana jest liczba 2 razy większa (pierwsze polecenie), po czym w komórce C2 wprowadzany jest kwadrat liczby znajdującej się w A2. Jeżeli wartość w komórce A2 nie jest liczbą w B2 wprowadzany jest komunikat "W komórce A2 musisz wpisać liczbę".

 

Sub Instrukcja_If_Then_Przykład_2()

   

    If IsNumeric(Range("A2").Value) Then

       Range("B2").Value = Range("A2").Value * 2

       Range("C2").Value = Range("A2").Value * Range("A2").Value

    Else

       Range("B2").Value = "W komórce A2 musisz wpisać liczbę"

    End If

End Sub

 

 

 

Więcej przykładów wykorzystania funkcji If Then znajdziesz w lekcjach poświęconym innym tematom, ponieważ istnieje bardzo mało użytecznych makr, które nie wykorzystują tej funkcji.

 

 

 

Szkolenie Excel 2003                            Szkolenie Excel 2007