Instrukcja If Then
Przykłady opisane w tej lekcji dostępne są w
arkuszu Excela: VBA.xlsm, tylko
ich samodzielne przerobienie daje gwarancję zapamiętania tej lekcji.
Przykłady dla wszystkich lekcji szkolenia Excel
2013: ExcelSzkolenie.pl
Cwiczenia Excel 2013.zip
Ta lekcja może być
obejrzana lub przeczytana poniżej.
Film wygląda
najlepiej jeśli będzie odtwarzany w rozdzielczości 720p HD, rozdzielczość można
zmienić dopiero po uruchomieniu filmu klikając na ikonie trybika która pojawi się w prawym dolnym
rogu poniższego ekranu. Po kilku sekundach od zmiany obraz wyostrzy się.
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 ikony na
pasku narzędzi szybki dostęp.
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: WIDOK → Linie siatki
Kręcimy raz pokrętłem
myszy w dół.
Włączamy Linie siatki
Menu: WIDOK → 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
Makro
'
'
ActiveWindow.DisplayGridlines = False
ActiveWindow.SmallScroll Down:=12
ActiveWindow.DisplayGridlines = True
End Sub
Komenda: Sub
jest oznaczeniem początku makra.
Linie_Siatki 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 dopisywania
komentarzy dla samego siebie lub innej osoby, która będzie edytować dane makro.
Zwykle wpisuje się w nie np jakie operacje powinna wykonywać dana część makra.
Komenda:
ActiveWindow.DisplayGridlines = False → wyłącza linie siatki
Komenda:
ActiveWindow.SmallScroll Down:=12 → powoduje przesunięcie ekranu w
dół, podczas nagrywania makra pokręciliśmy gałką przewijania w dół i zostało to
nagrane. Wszystko co zrobimy podczas nagrywania makra jest nagrywane!
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.