cognity

Kurs VBA: instrukcja warunkowa If

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. 

23 sierpnia 2022
blog

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).

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.

icon

Formularz kontaktowyContact form

Imię *Name
NazwiskoSurname
Adres e-mail *E-mail address
Telefon *Phone number
UwagiComments