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