Instrukcja warunkowa If Then Else w Excel VBA 7


1. 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:

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:

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.

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



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.

3. 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ą:

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

5. 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 email nie zostanie opublikowany.

7 komentarzy do “Instrukcja warunkowa If Then Else w Excel VBA

  • B

    Sub kobieta_czy_mezczyzna()
    Dim imie As String
    imie = InputBox(“Podaj swoje imię”)
    Range(“E2”) = Right(imie, 1)
    If Range(“E2”) = “a” Then
    plec = “kobieta”
    Else
    plec = “mężczyzna”
    End If
    Range(“E1”) = plec
    End Sub

    Sub czyPusta()
    If Range(“A1”) = “” Then
    Range(“A2”) = “Pusta”
    Else
    Range(“A2”) = “Wypełniona”
    End If
    End Sub

    Sub czyPelnoletni()
    If Range(“A1”) >= 18 Then
    Range(“A2”) = “pełnoletni”
    Else
    Range(“A2”) = “niepełnoletni”
    End If
    End Sub

  • Anonim

    Sub CzyKobieta()
    Dim strText As String
    Dim StrResult As String

    strText = InputBox(“Podaj Imie:”)
    If Right(strText, 1) = “a” Then
    StrResult = “kobieta”
    Else: StrResult = “facet”
    End If
    MsgBox (StrResult)

    End Sub
    Sub CzyPusta()
    Dim StrResult As String
    If Range(“A1”).Value = Empty Then
    StrResult = “pusta”
    Else: StrResult = “pełna”
    End If
    MsgBox (StrResult)
    End Sub

  • Tomo G

    Sub zad16()
    Dim data As Variant
    Dim okienko As String
    data = InputBox(“Podaj datę urodzenia w formacie: YYYY/MM/DD:”)
    If IsDate(data) = True Then
    If DateDiff(“yyyy”, data, Date) > 18 Then
    okienko = “pełnoletni”
    ElseIf DateDiff(“yyyy”, data, Date) = 18 And Month(data) – Month(Date) >= 0 And Day(Date) – Day(data) >= 0 Then
    okienko = “pełnoletni”
    Else
    okienko = “niepełnoletni”
    End If
    Else
    okienko = “Wprowadź prawidłowe dane”
    End If

    MsgBox (okienko)

    End Sub

  • Marcin

    5.1

    Option Explicit
    Sub FinkcjaWarunkowaIf4()

    Const strFemale As String = “Kobieta”
    Const strMale As String = “Mężczyzna”
    Dim strName As String
    strName = Cells(2, 1)

    If Len(strName) > 0 Then

    If Right(strName, 1) = “a” Then
    Cells(2, 4) = “Kobieta”
    Else: Cells(2, 4) = “Mężczyzna”
    End If

    Else: End If

    End Sub

     

    5.2

    Option Explicit
    Sub FunkcjaWasrunkowaIf5()

    Dim CzyPusta As Variant
    CzyPusta = Cells(1, 1)

    If Len(CzyPusta) > 0 Then
    MsgBox “Niepusta”
    Else: MsgBox “Pusta”
    End If

    End Sub

     

    5.3

    Option Explicit
    Sub FunkcjaWarunkowaIf6()

    Dim varWiek As Variant
    Dim strOdp As String
    Dim sglUrodziny As Single

    varWiek = InputBox(“Wprowadź swoją datę urodzenia. Wymagany format to RRRR/MM/DD”, “Sprawdź czy jestes pełnoletni”)
    sglUrodziny = DateDiff(“yyyy”, DateValue(varWiek), Date)

    If sglUrodziny >= 18 Then
    strOdp = “Jesteś pełnoletni”
    Else:
    strOdp = “Jesteś niepełnoletni”
    End If

    MsgBox strOdp

    End Sub

     

    5.4

    Option Explicit
    Sub FunkcjaWarunkowaIf7()

    Dim varWiek As Variant
    Dim strOdp As String

    varWiek = InputBox(“Wprowadź swój wiek:”, “Sprawdź czy jestes pełnoletni”)

    If varWiek < 0 Or varWiek > 100 Then
    strOdp = “Podaj wiek w przedziale od 0 do 100 lat”
    ElseIf varWiek >= 18 Then
    strOdp = “Jesteś pełnoletni”
    ElseIf varWiek < 18 Then
    strOdp = “Jesteś niepełnoletni”
    End If

    MsgBox strOdp

    End Sub

  • WiktorO

    Sub Jeżeli_zad3i4()

    Dim datBorn As Date
    Dim varAge As Single
    Dim strResult As String

    datBorn = DateSerial(InputBox(“Rok urodzenia”), InputBox(“Miesiąc urodzenia”), InputBox(“Dzień urodzenia”))
    varAge = DateDiff(“yyyy”, datBorn, Date, vbMonday)

    If IsNumeric(varAge) = True Then

    If Application.WorksheetFunction.Or(varAge > 100, varAge < 0) Then
    strResult = “Wprowadź poprawne dane”
    ElseIf varAge >= 18 Then
    strResult = “pełnoletni”
    ElseIf varAge < 18 Then
    strResult = “niepełnoletni”
    End If

    Else: strResult = “Wproawdź liczby”
    End If

    MsgBox strResult

    End Sub