Kurs VBA: instrukcja warunkowa If
Kategoria: Kurs Excel, Kurs VBA, Samouczek Excel

Instrukcja warunkowa If pozwala na zwiększenie elastyczności makra, dzięki czemu można wykonywać makro z różnymi ustawieniami. Użytkownik może zadecydować, którą opcję wybiera, a program w odniesieniu do wybranego wariantu będzie wykonywał określoną czynność. Wcześniej wymieniona instrukcja działa identycznie, jak funkcja JEŻELI. Zapraszamy do zapoznania się z możliwościami, jakie daje zastosowanie Instrukcji warunkowej If w VBA.
Instrukcja warunkowa If
W przypadku Microsoft Excel w funkcji JEŻELI mamy trzy argumenty, natomiast w VBA jest więcej możliwości. Pierwszą z nich jest instrukcja If … Then
If Then
'wykonywane instrukcje
End If
Instrukcja If … Then jest wykonywana wtedy, gdy test logiczny jest prawdziwy. Test logiczny polega na porównaniu dwóch lub większej ilości elementów. Poniżej przedstawiono przykład:
If 5>2 Then
MsgBox "komunikat"
End If
W związku z tym, że warunek 5>2 jest prawdziwy, to zostanie wyświetlony odpowiedni komunikat, natomiast gdyby była następująca sytuacja:
If 5 Then
MsgBox "komunikat"
End If
To nie zostanie wyświetlony komunikat, ponieważ test logiczny =5, nie występuje tutaj porównanie dwóch lub więcej elementów.
Instrukcja If … Else
Do bardziej skomplikowanych zależności przydaje się instrukcja warunkowa If … Else. Co więcej, za pomocą tej instrukcji możemy obsługiwać dowolnie złożone warunki.
If Then
'wykonywane instrukcje jeśli test jest prawdziwy
Else
'wykonywane instrukcje jeśli test jest fałszywy
End If
Instrukcja obsługuje dwa warunki. Wtedy, gdy test logiczny jest prawdziwy oraz wtedy, gdy jest fałszywy. Posługując się testem logicznym 5>2 instrukcja If … Then … Else ma następującą postać:
If 5>2 Then
MsgBox "pięć jest większe od dwóch"
Else
MsgBox "pięć jest mniejsze lub równe dwa"
End If
Zagnieżdżona instrukcja If … ElseIf … Else
Jeśli mamy więcej równorzędnych warunków, to można wykorzystać zagnieżdżoną instrukcję If … Else, ale również można wykorzystać inną konstrukcję programistyczną. Oto jej postać:
If Then
'wykonywane instrukcje jeśli test w If-ie jest prawdziwy
ElseIf Then
'wykonywane instrukcje jeśli test w ElseIf-ie jest prawdziwy
Else
'wykonywane instrukcje wcześniejsze testy są fałszywe
End If
Podany przykład jest dla trzech warunków, ale nic nie stoi na przeszkodzie, aby zastosować to dla n warunków (n > 2). W tym celu należy wykorzystać (n-2) razy instrukcję ElseIf.
Przykład z poprzednich instrukcji zapisany przy pomocy bieżącego wzoru przedstawia się następująco:
If 5>2 Then
MsgBox "pięć jest większe od dwóch"
ElseIf 5=0 Then
MsgBox "pięć jest równe dwa"
Else
MsgBox "pięć jest mniejsze od dwóch"
End If
Podsumowanie teorii
Warto zdać sobie sprawę, że powyższy test logiczny jest symbolem. W rzeczywistości porównywane są ze sobą zmienne.
Przykłady
Filtrowanie
Celem zadania jest napisanie dostosowanego makra, które będzie filtrowało dane po podaniu odpowiednich danych do komórki H1. Operacja filtrowania zostanie wykonana przy pomocy przycisku Filtruj (Rys. 1).
Rys. 1. Końcowy rezultat zadania
Przed przystąpieniem do uniwersalizacji makra należy je wcześniej nagrać. Oczywiście należy nagrać kilka makr:
Sub filtrowanie_9()
ActiveSheet.Range("$A$1:$F$21").AutoFilter Field:=5, Criteria1:="9%"
End Sub
Sub filtrowanie_17()
ActiveSheet.Range("$A$1:$F$21").AutoFilter Field:=5, Criteria1:="17%"
End Sub
Sub filtrowanie_20()
ActiveSheet.Range("$A$1:$F$21").AutoFilter Field:=5, Criteria1:="20%"
End Sub
Sub filtrowanie_25()
ActiveSheet.Range("$A$1:$F$21").AutoFilter Field:=5, Criteria1:="25%"
End Sub
Przy zastosowaniu instrukcji If zadanie będzie miało postać:
Sub filtrowanie()
podatek = Range("H1").Value
If podatek = 0.09 Then
filtrowanie_9
End If
If podatek = 0.17 Then
filtrowanie_17
End If
If podatek = 0.2 Then
filtrowanie_20
End If
If podatek = 0.25 Then
filtrowanie_25
End If
End Sub
W przypadku instrukcji If … Else należy zagnieździć warunki. Po zagnieżdżeniu jej postać będzie na tyle nieczytelna, że zrezygnowano z jej przedstawiania.
Instrukcja If … ElseIf … Else prezentuje się następująco:
Sub filtrowanie()
podatek = Range("H1").Value
If podatek = 0.09 Then
filtrowanie_9
ElseIf podatek = 0.17 Then
filtrowanie_17
ElseIf podatek = 0.2 Then
filtrowanie_20
ElseIf podatek = 0.25 Then
filtrowanie_25
Else
MsgBox "Nieprawidłowy warunek filtrowania"
End If
End Sub
W tym przypadku wykorzystanie instrukcji If… ElseIf … Else umożliwiło w najprostszy sposób na obsługę filtrowania.
Uwaga! Przykłady mają na celu pokazanie działanie pewnych konstrukcji programistycznych i autor zdaje sobie sprawę z tego, że kod ww. przykładów nie jest optymalny. Tworzenie instrukcji jest szczegółowo omawiane na kursie VBA w Excelu.
Autorem tekstu oraz ilustracji jest Grzegorz Plak – trener Cognity.
Możesz być również zainteresowany:
- Kurs VBA w Excelu Podstawowy
- Tworzenie Makra w Excelu
- Kurs VBA - Film instruktażowy cz. II (instrukcje warunkowe i pętle)
Kurs VBA: instrukcja warunkowa If by Cognity is licensed under a Creative Commons Uznanie autorstwa-Użycie niekomercyjne 4.0 Międzynarodowe License.
Cognity zaprasza Cię na praktyczne kursy i szkolenia:
Kurs VBA (Visual Basic for Applications) w Excelu Podstawowy - szkolenie z certyfikatem
Więcej informacji znajdziesz w artykułach:
Funkcje daty w MS Excel cz. 1

Zainteresować Cię może również:
Numer tygodnia w Excelu
