VBA If, ElseIf, Else (Ostateczny przewodnik po oświadczeniach If)

Oświadczenie VBA If

Jeśli następnie

Instrukcje VBA If umożliwiają testowanie, czy wyrażenia mają wartość TRUE lub FALSE, uruchamiając inny kod w oparciu o wyniki.Spójrzmy na prosty przykład:
1 Jeśli Range("a2").Value > 0 Wtedy Range("b2").Value = "Dodatni"
To sprawdza, czy wartość w Zakresie A2 jest większa niż 0. Jeśli tak, ustaw Zakres B2 na „Dodatni”Uwaga: Podczas testowania warunków użyjemy operatorów porównania =, >, <, , =. Omówimy je bardziej szczegółowo w dalszej części artykułu.Oto składnia prostej jednoliniowej instrukcji If:
1 Jeśli [wyrażenie_testowe] to [działanie]
Aby ułatwić czytanie, możesz użyć znaku kontynuacji wiersza (podkreślenia), aby rozwinąć instrukcje If do dwóch wierszy (tak jak to zrobiliśmy na powyższym obrazku):
12 Jeśli [wyrażenie_testowe] to _[akcja]
12 Jeśli zakres("a2").Wartość > 0 Wtedy _Zakres("b2").Value = "Dodatni"

Zakończ, jeśli

Powyższa „jednoliniowa” instrukcja if działa dobrze, gdy testujesz jeden warunek. Ale ponieważ instrukcje IF stają się bardziej skomplikowane z wieloma warunkami, musisz dodać „End If” na końcu instrukcji if:
123 Jeśli zakres("a2").Wartość > 0 WtedyZakres("b2").Value = "Dodatni"Zakończ, jeśli

Oto składnia:

123 Jeśli [wyrażenie_testowe] to[akcja]Zakończ, jeśli

End If oznacza koniec instrukcji if.

Teraz dodajmy ElseIF:

ElseIF - Wiele warunków

ElseIf jest dodawana do istniejącej instrukcji If. ElseIf sprawdza, czy warunek jest spełniony TYLKO jeśli poprzednie warunki nie zostały spełnione.W poprzednim przykładzie sprawdziliśmy, czy wartość komórki jest dodatnia. Teraz sprawdzimy również, czy wartość komórki jest ujemna za pomocą ElseIf:
12345 Jeśli zakres("a2").Wartość > 0 WtedyZakres("b2").Value = "Dodatni"ElseIf Range("a2").Value < 0 WtedyZakres("b2").Value = "Ujemna"Zakończ, jeśli

Możesz użyć wielu ElseIf, aby przetestować wiele warunków:

1234567891011 Sub If_Multiple_Conditions()If Range("a2").Value = "Kot" WtedyZakres("b2").Value = "Miau"ElseIf Range("a2").Value = "Pies" ThenZakres("b2").Value = "Hau"ElseIf Range("a2").Value = "Kaczka" ThenZakres("b2").Value = "Quack"Zakończ, jeśliNapis końcowy

Teraz dodamy W przeciwnym razie:

W przeciwnym razie

ten W przeciwnym razie będzie działać, jeśli żadne inne poprzednie warunki nie zostały spełnione.

Zakończymy nasz przykład, używając Else do wskazania, że ​​jeśli wartość komórki nie jest dodatnia ani ujemna, to musi wynosić zero:

1234567 Jeśli zakres("a2").Wartość > 0 WtedyZakres("b2").Value = "Dodatni"ElseIf Range("a2").Value < 0 WtedyZakres("b2").Value = "Ujemna"W przeciwnym razieZakres("b2").Value = "Zero"Zakończ, jeśli

Jeśli inaczej

Najpopularniejszym typem instrukcji If jest prosty If-Else:

1234567 Sub Jeśli_Else()Jeśli zakres("a2").Wartość > 0 WtedyZakres("b2").Value = "Dodatni"W przeciwnym razieZakres("b2").Value = "Niedodatnia"Zakończ, jeśliNapis końcowy

Zagnieżdżone IF

Możesz także „zagnieździć” wyrażenia if wewnątrz siebie.

1234567891011 Sub zagnieżdżone_jeżeli()Jeśli zakres("a2").Wartość > 0 WtedyZakres("b2").Value = "Dodatni"W przeciwnym razieJeśli Zakres("a2").Wartość < 0 WtedyZakres("b2").Value = "Ujemna"W przeciwnym razieZakres("b2").Value = "Zero"Zakończ, jeśliZakończ, jeśliNapis końcowy

IF - Or, And, Xor, Not

Następnie omówimy operatory logiczne: Or, And, Xor, Not.

Jeśli Or

ten Lub testy operatorskie, jeśli co najmniej jeden warunek jest spełniony.

Poniższy kod sprawdzi, czy wartość w zakresie A2 jest mniejsza niż 5000 lub większa niż 10 000:

123 Jeśli zakres("a2").Wartość 10000 WtedyZakres("b2").Value = "Poza zakresem"Zakończ, jeśli

W jednym wierszu możesz umieścić wiele znaków OR:

123 Jeśli Range("a2").Value 10000 Lub Range("a2").Value = 9999 WtedyZakres("b2").Value = "Poza zakresem"Zakończ, jeśli

Jeśli zamierzasz używać wielu znaków or, zaleca się użycie znaku kontynuacji wiersza, aby kod był łatwiejszy do odczytania:

123456 Jeśli Zakres("a2").Wartość < 5000 Lub _Zakres("a2").Wartość > 10000 Lub _Zakres("a2").Wartość = 9999 WtedyZakres("b2").Value = "Poza zakresem"Zakończ, jeśli

Jeśli I

Operator And pozwala sprawdzić, czy WSZYSTKIE warunki są spełnione.

123 Jeśli Range("a2").Value >= 5000 And Range("a2").Value <= 10000 WtedyZakres("b2").Value = "W zakresie"Zakończ, jeśli

Jeśli Xor

Operator Xor pozwala sprawdzić, czy spełniony jest dokładnie jeden warunek. Jeśli spełnione są warunki zero, Xor zwróci FALSE, Jeśli spełnione są dwa lub więcej warunków, Xor również zwróci false.

Rzadko widziałem Xor używany w programowaniu VBA.

Jeśli nie

Operator Not służy do konwersji FALSE na TRUE lub TRUE na FALSE:

123 Sub JEŻELI_Nie()MsgBox nie (prawda)Napis końcowy

Zauważ, że operator Not wymaga nawiasów otaczających wyrażenie, aby się przełączyć.

Operator Not można również zastosować do instrukcji If:

123 Jeśli nie (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) WtedyZakres("b2").Value = "Poza zakresem"Zakończ, jeśli

Jeśli porównania

Dokonując porównań, zazwyczaj używasz jednego z operatorów porównania:

Operator porównania Wyjaśnienie
= Równy
Nie równa się
> Lepszy niż
>= Większy lub równy
< Mniej niż
<= Mniejszy lub równy

Możesz jednak użyć dowolnego wyrażenia lub funkcja co daje w wyniku TRUE lub FALSE

Jeśli - funkcja logiczna

Podczas budowania wyrażeń dla instrukcji If można również użyć dowolnej funkcji, która generuje TRUE lub False. VBA ma kilka z tych funkcji:

Funkcjonować Opis
Czy data Zwraca TRUE jeśli wyrażenie jest prawidłową datą
Jest pusty Sprawdź puste komórki lub niezdefiniowane zmienne
Czy błąd? Sprawdź wartości błędów
IsNull Sprawdź wartość NULL
Czy numeryczne Sprawdź wartość liczbową

Można je nazwać tak:

1 If IsEmpty(Range("A1").Value) Then MsgBox "Komórka pusta"

Excel ma również wiele dodatkowych funkcji, które można wywołać za pomocą funkcji WorksheetFunction. Oto przykład funkcji IsText programu Excel:

12 Jeśli Application.WorksheetFunction.IsText(Range("a2").Value) Wtedy _MsgBox "Komórka to tekst"

Można również tworzyć własne funkcje zdefiniowane przez użytkownika (UDF). Poniżej stworzymy prostą funkcję Boolean, która zwraca TRUE. Następnie wywołamy tę funkcję w naszej instrukcji If:

1234567891011 Sub Jeżeli_Funkcja()Jeśli TrueFunkcja wtedyMsgBox "Prawda"Zakończ, jeśliNapis końcowyFunkcja TrueFunction() jako BooleanPrawdziwa funkcja = PrawdaKoniec funkcji

Porównywanie tekstu

Możesz także porównywać tekst podobnie do porównywania liczb:
1 Msgbox "a" = "b"
1 Msgbox "a" = "a"
Porównując tekst, musisz mieć na uwadze „wielkość” (górną lub dolną). Domyślnie VBA traktuje litery z różnymi wielkościami liter jako niepasujące. Innymi słowy, „A” „a”.Jeśli chcesz, aby VBA ignorował wielkość liter, musisz dodać deklarację Option Compare Text na górze modułu:
1 Opcja Porównaj tekst

Po złożeniu deklaracji „A” = „a”:
12345 Opcja Porównaj tekstSub Jeśli_Tekst()MsgBox "a" = "A"Napis końcowy

VBA Jeśli podoba

Operator podobny do VBA umożliwia dokonywanie niedokładnych porównań tekstu. Kliknij link „Lubię to operator”, aby dowiedzieć się więcej, ale poniżej pokażemy podstawowy przykład:

12345678 Dim strName jako StringstrName = "Pan Karol"Jeśli strName Like "Pan*" WtedyMsgBox "Prawda"W przeciwnym razieMsgBox "Fałsz"Zakończ, jeśli

Tutaj używamy symbolu wieloznacznego gwiazdki „*”. * oznacza dowolną liczbę dowolnych znaków. Tak więc powyższe stwierdzenie If zwróci TRUE. Operator Like jest niezwykle potężnym, ale często niedostatecznie wykorzystywanym narzędziem do radzenia sobie z tekstem.

Jeśli pętle

Pętle VBA umożliwiają powtarzanie działań. Połączenie IF-ELSE z pętlami to świetny sposób na szybkie przetwarzanie wielu obliczeń.

Kontynuując nasz przykład Pozytywny / Negatywny, dodamy pętlę For Each Loop, aby przejść przez zakres komórek:

1234567891011121314 Sub If_Loop()Dim Cell jako zakresDla każdej komórki w zakresie ("A2:A6")Jeśli Komórka.Wartość > 0 WtedyCell.Offset(0, 1).Value = "Dodatni"ElseIf Cell.Value < 0 WtedyCell.Offset(0, 1).Value = "Ujemna"W przeciwnym razieCell.Offset(0, 1).Value = "Zero"Zakończ, jeśliNastępna komórkaNapis końcowy

Jeśli inne przykłady

Teraz omówimy kilka bardziej konkretnych przykładów.

Sprawdź, czy komórka jest pusta

Ten kod sprawdzi, czy komórka jest pusta. Jeśli jest pusty, zignoruje komórkę. Jeśli nie jest pusty, wyświetli wartość komórki do komórki po prawej stronie:
1234567 Sub If_Cell_Empty()Jeśli zakres("a2").Wartość "" WtedyZakres("b2").Wartość = Zakres("a2").WartośćZakończ, jeśliNapis końcowy

Sprawdź, czy komórka zawiera określony tekst

Funkcja Instr sprawdza, czy ciąg tekstowy znajduje się w innym ciągu. Użyj go z instrukcją If, aby sprawdzić, czy komórka zawiera określony tekst:
123 If Instr(Range("A2").value,"text") > 0 WtedyMsgbox "Znaleziono tekst"Zakończ, jeśli

Sprawdź, czy komórka zawiera tekst

Ten kod sprawdzi, czy komórka jest tekstem:
1234567 Sub If_Cell_Is_Text()If Application.WorksheetFunction.IsText(Range("a2").Value) WtedyMsgBox "Komórka to tekst"Zakończ, jeśliNapis końcowy

Jeśli Goto

Możesz użyć wyniku instrukcji If, aby „przejść do” innej sekcji kodu.
12345678910 Sub JeśliPrzejdźDo ()Jeśli IsError(Cell.value) WtedyPrzejdź do PomińZakończ, jeśli„Jakiś kod”Pominąć:Napis końcowy

Usuń wiersz, jeśli komórka jest pusta

Używając If i pętli możesz sprawdzić, czy komórka jest pusta, a jeśli tak, usunąć cały wiersz.
123456789 Sub UsuńRowIfCellBlank()Przyciemnij komórkę jako zakresDla każdej komórki w zakresie("A2:A10")If Cell.Value = "" Then Cell.EntireRow.DeleteNastępna komórkaNapis końcowy

Jeśli MessageBox Tak / Nie

Dzięki skrzynkom wiadomości VBA możesz poprosić użytkownika o wybranie jednej z kilku opcji. Okno komunikatu Tak/Nie prosi użytkownika o wybranie Tak lub Nie. Do procedury można dodać Skrzynkę komunikatu Tak/Nie, aby zapytać użytkownika, czy chciałby kontynuować wykonywanie procedury, czy nie. Obsługujesz dane wejściowe użytkownika za pomocą instrukcji If.Oto w praktyce okno komunikatu Tak/Nie:
123456789101112 Sub MsgBox Variable()Ciemna odpowiedź jako liczba całkowitaanswer = MsgBox("Czy chcesz kontynuować?", vbQuestion + vbYesNo)Jeśli odpowiedź = vbTak WtedyMsgBox "Tak"W przeciwnym razieMsgBox "Nie"Zakończ, jeśliNapis końcowy

VBA If, ElseIf, Else w programie Access VBA

Funkcje If, ​​ElseIf i Else działają dokładnie tak samo w programie Access VBA, jak w programie Excel VBA.

Możesz użyć instrukcji If, aby sprawdzić, czy w Recordset znajdują się rekordy.

wave wave wave wave wave