Instrukcja warunkowa If Then Else w Excel VBA

Czym jest instrukcja warunkowa If Then Else VBA

W najprostszym rozumieniu, jest to odpowiednik funkcji „Jeżeli()” stosowany w kodzie VBA. Wyobraźmy sobie, że chcemy, by nasz program podejmował decyzje na podstawie danych, które wprowadzimy. W zależności od tego, jakie dane zostaną wprowadzone na początku, możemy otrzymać wiele różnych rezultatów. Uproszczony model działania instrukcji If Then Else VBA zamieszczam poniżej:

If [Warunek] Then
[Kod uruchamiany, gdy warunek jest spełniony]
Else: [Kod uruchamiany, gdy warunek nie jest spełniony]
End If

Porównując instrukcję ze standardową funkcja „Jeżeli(warunek; kod po spełnieniu warunku; kod po niespełnieniu warunku)„, analogia fraz będzie wyglądać następujący sposób:

Jeżeli(  If
warunek [Warunek];
kod_po_spełnieniu_warunku; Then [Kod uruchamiany, gdy warunek jest spełniony]
kod_po_niespełnieniu_warunku Else [Kod uruchamiany, gdy warunek nie jest spełniony]
)  End If

Co istotne nasz program po spełnieniu warunku, nie przerabia bloku kodu zapisanego w klauzuli Else. Po prostu ją pomija. Jeśli więc to możliwe, w klauzuli Then powinniśmy wpisywać bloki kodu, które wykonywane będą z większym prawdopodobieństwem. Oszczędzamy w ten sposób zasoby naszego komputera.

Przykład wykorzystania instrukcji warunkowej If Then Else

Wyobraźmy sobie, że chcemy w Excelu napisać krótkie makro, które na podstawie wpisanego wieku w komórce A2, określi słownie czy osoba jest pełnoletnia, czy niepełnoletnia. Wynik powinien pojawić się w komórce B2.

Kurs Excel VBA - If Then Else VBA
Kurs Excel VBA – If Then Else VBA
Sub ITEExample()

If Range("A2") = 18 Then
Range("B2") = "Pełnoletni"
Else: Range("B2") = "Niepełnoletni"
End If
End Sub

Przechodzimy z edytora VBA do naszego skoroszytu. Wchodzimy w arkusz, w którym chcemy wykonać nasz program. W moim przypadku będzie to „Arkusz1”. Klikamy w zakładkę „Developer” i z makr wybieramy nasz program.

Rozszerzenie instrukcji IF THEN ELSE:  IF THEN ELSEIF

Kod z naszego poprzedniego programu jest oczywiście uproszczony i uwzględnia możliwość uzyskania jedynie dwóch różnych od siebie wyników. Nie uwzględnia także możliwości wpisania dat, tekstów, liczb ujemnych itp. Jeśli chcemy, by nasz program w zależności od wypisanej danej mógł zwrócić 3 lub też więcej różnych od siebie wyników, modyfikujemy naszą instrukcję o klauzulę ELSE IF. Instrukcję możemy porównać do zagnieżdżonych dwóch lub więcej funkcji JEŻELI(WARUNEK_1; BLOK_KODU_1 ;JEŻELI(WARUNEK_2; BLOK KODU2; BLOK_KODU_3)). Spróbujmy zatem usprawnić nasz program stosując się do niżej zapisanych dodatkowych warunków:

  • Opieramy nasz program o wprowadzanie zdefiniowanej zmiennej
  • Dane wpisujemy w okienku InputBox, a sam wynik wyświetlany jest w formie komunikatu MsgBox
  • Dla liczb ujemnych i większych niż 100 będziemy prezentować komunikat o błędnie wprowadzonych danych

Do dzieła !

Na sam początek spróbujmy napisać program, spełniający nasze 3 pierwsze warunki. Typ danych Variant stosujemy tutaj celowo, z uwagi na to, by można było wprowadzić daną zarówno tekstową jak i liczbową:

Sub ITEExample()
 
'definiujemy zmienne
Dim VarAge As Variant
Dim StrResult As String
 
VarAge = InputBox("Wprowadź swój wiek")
If VarAge > 100 Then
StrResult = "Wprowadź poprawne dane"
ElseIf VarAge >= 18 Then
StrResult = "Pełnoletni"
ElseIf VarAge < 0 Then
StrResult = "Wprowadź poprawne dane"
ElseIf VarAge < 18 Then
StrResult = "Niepełnoletni"
End If
 
MsgBox StrResult
End Sub

Warunki zagnieżdżone

Nasz kod uwzględnia już wszystkie możliwości, w przypadku, gdy wprowadzimy wiek jako liczbę naturalną. Spróbujmy teraz usprawnić nasz kod o warunki takie jak:

  • Wprowadzimy komunikat o błędnie wpisanych danych dla wartości nienumerycznych
  • Wiek z miejscem dziesiętnym zaokrąglamy do liczby całkowitej

W tym celu wprowadzimy instukcję IF THEN ELSEIF wewnątrz instrukcji IF THEN ELSE. W przypadku zaokrąglenia liczby z miejscem dziesiętnym zastosujemy prostą funkcję Round(). To, czy zmienna jest numeryczna sprawdzamy przy pomocy funkcji IsNumeric.

Sub ITEExample()
 
'definiujemy zmienne
Dim VarAge As Variant
Dim StrResult As String
 
VarAge = InputBox("Wprowadź swój wiek")
 
If IsNumeric(VarAge) = True Then
VarAge = Round(VarAge, 0) 'zaokrąglenie bez miejsc dziesiętnych

If VarAge > 100 Then
StrResult = "Wprowadź poprawne dane"
ElseIf VarAge >= 18 Then
StrResult = "Pełnoletni"
ElseIf VarAge < 0 Then
StrResult = "Wprowadź poprawne dane"
ElseIf VarAge < 18 Then
StrResult = "Niepełnoletni"
End If 'zakończenie instrukcji zagnieżdżonej
Else: StrResult = "Wprowadź wartość liczbową"
End If 'zakończenie warunku dotyczącego wprowadzania danych liczbowych
 
MsgBox StrResult
End Sub

Zadania (Rozwiązanie możesz wpisać w komentarzu)

5.1 Wykorzystując funkcje znakowe oraz instrukcję If Then Else napisz program, który na podstawie ostatniej litery wprowadzonego imienia określi, czy jest to kobieta, czy mężczyzna. Upraszając zadanie skupmy się na tym, że żeńskie imiona kończą się na literę „a”.

5.2 Korzystając z danych w arkuszu napisz program określający, czy komórka A1 jest pusta, czy też wypełniona

5.3 Analogicznie do przykładu z tego rozdziału napisz program, który na podstawie wprowadzonej daty urodzenia określi, czy osoba jest pełnoletnia, czy niepełnoletnia.

5.4 Zmodyfikuj w dowolny sposób przykład z tego rozdziału wykorzystując operator logiczny „OR”.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

11 komentarzy “Instrukcja warunkowa If Then Else w Excel VBA”