- Wybierz przykład przypadku
- Składnia instrukcji przypadku
- Wybierz kryteria przypadku
- Wybierz wielkość liter - tekst i podobny operator
- Sprawa - Dwukropek
- Wybór przypadku - i / lub - wiele warunków
- Zagnieżdżone instrukcje przypadku
- Case Statement vs. If Statement
- Przykłady wyboru przypadku VBA
- VBA Wybierz przypadek w programie Access
W VBA Wybierz opis przypadku jest alternatywą dla Stwierdzenie Jeśli-To, co pozwala sprawdzić, czy warunki są spełnione, uruchamiając określony kod dla każdego warunku. Instrukcja Select jest lepsza niż instrukcja If, gdy istnieje wiele warunków do przetworzenia.
Wybierz przykład przypadku
Ten przykład monituje użytkownika o YesNoCancel MessageBox i testuje, którą opcję wybrał użytkownik:
1234567891011121314 | Sub Select_case_Yes_No_Cancel()Dim nResult jako VbMsgBoxResultnResult = MsgBox("…", vbYesNoCancel)Wybierz przypadek nWynikSprawa vbTakMsgBox "Tak"Sprawa vbNoMsgBox "Nie"Sprawa vbAnulujMsgBox "Anuluj"Koniec WybierzNapis końcowy |
Poniżej opisaliśmy odpowiednik za pomocą instrukcji If. Zauważysz, że instrukcja Case Select wymaga nieco mniej pisania - ta korzyść jest wzmacniana podczas testowania wielu kryteriów.
12345678910111213 | Sub Jeśli_Tak_Nie_Anuluj()Dim nResult jako VbMsgBoxResultnResult = MsgBox("… ", vbYesNoCancel)Jeśli nResult = vbTak WtedyMsgBox "Tak"ElseIf nResult = vbNo WtedyMsgBox "Nie"ElseIf nResult = vbAnuluj WtedyMsgBox "Anuluj"Zakończ, jeśliNapis końcowy |
Składnia instrukcji przypadku
Składnia instrukcji Select Case jest następująca:
12345678910 | Wybierz przypadek [Wyrażenie testowe]Przypadek [warunek 1][Działanie, jeśli warunek 1 jest spełniony]Przypadek [warunek 2][Działanie, jeśli warunek 2 jest spełniony]Przypadek [warunek n][Działanie, jeśli warunek n jest spełniony]Przypadek inny[Działanie, jeśli żadne nie są prawdziwe]Koniec Wybierz |
Gdzie:
[Wyrażenie testowe] - jest wartością do oceny. Zwykle jest to zmienna.
[Działanie, jeśli warunek n jest spełniony] - To tylko kod do uruchomienia, jeśli warunek zostanie spełniony (tak jak w przypadku instrukcji If)
[Warunek n] - Czy warunek do przetestowania. Istnieje wiele różnych sposobów testowania warunków. Omówimy je poniżej.
Instrukcja Case wykona kod dla PIERWSZEGO warunku, który okaże się PRAWDZIWY. Jeśli żaden warunek nie zostanie spełniony, żaden kod nie zostanie wykonany, chyba że zostanie dodana klauzula Else.
Wybierz kryteria przypadku
Select Cases może służyć do oceny zarówno wartości liczbowych, jak i tekstu. Najpierw omówimy, jak używać Select Cases do oceny wyrażeń liczbowych.
Dopasowanie ścisłe - liczby
Możesz łatwo przetestować dokładne dopasowanie za pomocą Case Statement:
1 | Przypadek 10 |
lub dodaj przecinki, aby sprawdzić dokładne dopasowania z wieloma liczbami:
1 | Przypadek 20, 30, 40 |
1234567891011121314 | Sub dokładne dopasowanie_liczby()Dim n jako liczba całkowitan = CInt(Pole wprowadzania("… "))Wybierz przypadek nPrzypadek 10' Jeśli n wynosi 10 WtedyPrzypadek 20, 30, 40' Jeśli n wynosi 20/30/40 WtedyPrzypadek inny' Jeśli n nie jest równe 10/20/30/40 WtedyKoniec WybierzNapis końcowy |
Zakresy
Możesz sprawdzić, czy liczba mieści się w takim zakresie:
1 | Przypadek 55 do 74 |
Ta procedura wygeneruje wynik literowy dla ucznia na podstawie jego wyniku liczbowego:
12345678910111213141516171819202122 | Sub Calc_Grade()Wynik Dim jako liczba całkowitaDim LetterGrade As StringWynik = InputBox("Wprowadź wynik ucznia")Wybierz punktację sprawyPrzypadek 90 do 100LiteraGrade = "A"Sprawa 80 do 90LiteraGrade = "B"Przypadek 70 do 80Klasa literowa = „C”Sprawa 60 do 70LiteraGrade = "D"Przypadek innyLiteraGrade = "F"Koniec WybierzMsgBox "Ocena ucznia to: " & LetterGradeNapis końcowy |
Możesz także testować zasięgi za pomocą Case Is
Wybierz przypadek to
1234 | Wielkość liter < 55'Nic nie robićPrzypadek <= 74MsgBox "W zasięgu" |
Pamiętaj, że instrukcja Case wykona kod tylko dla pierwszego dopasowania.
Ta procedura obliczy ocenę ucznia za pomocą Case Is zamiast Case To.
12345678910111213141516171819202122 | Sub Select_Case_Is_Grade()Wynik Dim jako liczba całkowitaDim LetterGrade jako ciągWynik = InputBox("Wprowadź wynik ucznia")Wybierz punktację sprawyPrzypadek jest >= 90LiteraGrade = "A"Wielkość liter >= 80LiteraGrade = "B"Przypadek >= 70Klasa literowa = „C”Przypadek jest >= 60LiteraGrade = "D"Przypadek innyLiteraGrade = "F"Koniec WybierzMsgBox "Ocena ucznia to: " & LetterGradeNapis końcowy |
Przypadek inny
Możesz dodać „Przypadek inny” na końcu swojego opisu przypadku, aby zrobić coś, jeśli nie zostaną spełnione żadne warunki:
1 | Przypadek inny |
Zobacz koniec poprzedniego przykładu kodu, aby zobaczyć, jak można użyć Case Else.
Wybierz wielkość liter - tekst i podobny operator
Jak dotąd nasze przykłady Select Case działały tylko z liczbami. Możesz również używać instrukcji Select Case z tekstem.
Dopasowanie ścisłe - tekst
Możesz sprawdzić, czy wyrażenie pasuje do dokładnej frazy w następujący sposób:
1 | Sprawa "Buraki" |
Lub użyj przecinków, aby sprawdzić, czy wyrażenie dokładnie pasuje do więcej niż jednej frazy:
1 | Etui „Jabłko”, „Banan”, „Pomarańczowy” |
Składanie to wygląda tak:
12345678910 | Sub ExactMatch_Food()Wybierz zakres obserwacji("a1").ValueSprawa "Buraki"MsgBox "Warzywa"Etui „Jabłko”, „Banan”, „Pomarańczowy”MsgBox "Owoce"Koniec WybierzNapis końcowy |
Duże i małe litery
Domyślnie VBA jest rozróżniana wielkość liter. Oznacza to, że VBA traktuje „Tekst” inaczej niż „tekst”. Aby wyłączyć rozróżnianie wielkości liter, dodaj opcję Porównaj tekst na górze modułu:
1 | Opcja Porównaj tekst |
Ten przykład sprawi, że podczas pracy z tekstem funkcja Case Select nie będzie uwzględniać wielkości liter:
123456789101112 | Opcja Porównaj tekstSub ExactMatch_Food()Wybierz zakres obserwacji("a1").ValueSprawa "Buraki"MsgBox "Warzywa"Etui „Jabłko”, „Banan”, „Pomarańczowy”MsgBox "Owoce"Koniec WybierzNapis końcowy |
Sprawa jak
Like Operator umożliwia dokonywanie niedokładnych porównań. Jeśli tekst pasuje, Like zwraca TRUE, jeśli nie pasuje, zwraca FALSE. To sprawia, że operator Like jest łatwy w użyciu z instrukcjami If, jednak nie będzie działał tak łatwo z instrukcjami Case.
Przypadek podobny - nieudany test
Poniższy kod pokazuje, że operator Like nie działa z Select Case:
1234567891011 | Sub Select_Case_Like_DoesnotWork()Dim słowo jako ciągsłowo = "KAKAO"Wybierz słowo literoweSłowo wielkości2 jak „*C*C*”MsgBox "Dobry"Przypadek innyMsgBox "Niedobry"Koniec WybierzNapis końcowy |
Case Like – właściwy sposób
Możemy jednak dodać wyrażenie TRUE, aby instrukcja Select działała z operatorem Like:
1234567891011 | Sub Select_Case_Like_CorrectWay()Dim słowo jako ciągsłowo = "KAKAO"Wybierz przypadek prawdaSłowo wielkości jak „*C*C*”MsgBox "Dobry"Przypadek innyMsgBox "Niedobry"Koniec WybierzNapis końcowy |
Sprawa - Dwukropek
Korzystając z instrukcji Case, możesz dodać tyle wierszy kodu, ile chcesz uruchomić z każdym warunkiem. Jeśli jednak potrzebujesz uruchomić tylko jedną linię kodu. Możesz użyć dwukropka ( : ), aby napisać wszystko w tym samym wierszu.
Oto ten sam przykład oceny ucznia, co poprzednio, z wyjątkiem użycia dwukropka do skrócenia kodu:
1234567891011121314151617 | Pod Calc_Grade_colon()Wynik Dim jako liczba całkowitaDim LetterGrade As StringWynik = InputBox("Wprowadź wynik ucznia")Wybierz punktację sprawyPrzypadek 90 do 100: LetterGrade = „A”Przypadek 80 do 90: LetterGrade = „B”Przypadek 70 do 80: LetterGrade = „C”Przypadek 60 do 70: LetterGrade = „D”Przypadek inny: LetterGrade = „F”Koniec WybierzMsgBox "Ocena ucznia to: " & LetterGradeNapis końcowy |
Wybór przypadku - i / lub - wiele warunków
Możesz użyć operatorów i / lub, aby przetestować dodatkowe kryteria wraz z Select Case.
W tym przykładzie używamy Select Case na zmiennej „wiek”, ale chcemy również przetestować płeć. Używamy więc operatora And do wykonania bardziej złożonego testu:
123456789101112131415161718 | Sub NestedSelectCase()Ciemny seks jako ciągDim wiek As Integerpłeć = „mężczyzna” 'lub kobietawiek = 15Wybierz wiek sprawyPrzypadek to < 20 A płeć = „mężczyzna”Msgbox "Mężczyzna poniżej 20 roku życia"Przypadek to < 20 A płeć = "kobieta"Msgbox "Kobieta poniżej 20 roku życia"Wielkość liter >= 20 A płeć = "mężczyzna"Msgbox "Mężczyzna powyżej 20 roku życia"Wielkość liter >= 20 A płeć = "kobieta"Msgbox "Kobieta powyżej 20 roku życia"Koniec WybierzNapis końcowy |
Zagnieżdżone instrukcje przypadku
Podobnie jak instrukcje If, instrukcje Case można zagnieżdżać w sobie:
123456789101112131415161718192021222324 | Sub NestedSelectCase()Ciemny seks jako ciągDim wiek As Integerpłeć = „mężczyzna” 'lub kobietawiek = 15Wybierz wiek sprawySprawa to <20Wybierz płeć przypadkuSprawa „męska”MsgBox "Mężczyzna poniżej 20 roku życia"Sprawa "kobieta"MsgBox "Kobieta poniżej 20 roku życia"Koniec WybierzWielkość liter >= 20 A płeć = "kobieta"Wybierz płeć przypadkuSprawa „męska”MsgBox "Mężczyzna powyżej 20 roku życia"Sprawa "kobieta"MsgBox "Kobieta powyżej 20 roku życia"Koniec WybierzKoniec WybierzNapis końcowy |
Case Statement vs. If Statement
Im więcej warunków do przetestowania, tym bardziej użyteczna jest instrukcja Case w porównaniu do instrukcji If. Spójrzmy na przykład.
Oto kod wymagany do sprawdzenia, czy nazwa arkusza roboczego jest równa zestawowi wartości za pomocą instrukcji If:
12345 | If Name = „Budżet” Or Name = „Prognoza” Or Name = „Trailing12” Or _Name = „Flex” Lub Name = „Inne proporcje” Or Name = „Porównanie” Lub _Name = "BudReview" Or Name = "P&L_Review" Or Name = "Inne" Wtedy'Zrób cośZakończ, jeśli |
Oto ten sam kod z użyciem instrukcji Select:
12345 | Wybierz nazwę sprawySprawa „Budżet”, „Prognoza”, „Trailing12”, „Flex”, „Inne proporcje”, _„Porównanie”, „BudReview”, „P&L_Review”, „Inne”'Zrób cośKoniec Wybierz |
Jak widać, w tym scenariuszu znacznie łatwiej jest użyć instrukcji Select. Jest znacznie mniej pisania i jest znacznie łatwiejszy do odczytania.
Przykłady wyboru przypadku VBA
Przykład 1. Opis przypadku Funkcja zdefiniowana przez użytkownika (UDF)
Powtórzmy powyższy przykład obliczania ocen i utwórzmy UDF, aby obliczyć wynik ucznia:
12345678910111213141516 | Funkcja GetGrade (ocena jako liczba całkowita) jako ciągWybierz punktację sprawyPrzypadek 90 do 100GetGrade = "A"Sprawa 80 do 90Uzyskaj ocenę = „B”Przypadek 70 do 80Uzyskaj ocenę = „C”Sprawa 60 do 70Uzyskaj ocenę = „D”Przypadek innyUzyskaj ocenę = „F”Koniec WybierzKoniec funkcji |
Teraz możemy użyć funkcji GetGrade w naszym arkuszu programu Excel, aby szybko obliczyć oceny uczniów:
Przykład 2. Nazwa arkusza testowego / Stwierdzenie przypadku pętli
Ten kod będzie przechodzić przez wszystkie arkusze w skoroszycie, usuwając ochronę arkuszy spełniających określone kryteria:
123456789101112 | Sprawa podrzędna_UnProtectSheet()Dim ws As WorksheetDla każdego ws w arkuszach roboczychWybierz Case ws.Name 'Lista wszystkich arkuszy ze współczynnikamiSprawa „Budżet”, „Prognoza”, „Trailing12”, „Flex”, „Inne proporcje”, _„Porównanie”, „BudReview”, „P&L_Review”, „Inne”ws.UnprotectKoniec WybierzNastępnyNapis końcowy |
Przykład 3. Wybierz przypadek - wartość komórki
Ten przykład przetestuje wynik ucznia w komórce, wyświetlając ocenę literową bezpośrednio do komórki po prawej stronie.
12345678910111213141516 | Podrzędna wartość komórki testowej()Przyciemnij komórkę jako zakresUstaw komórkę = Zakres("C1")Wybierz komórkę sprawy.WartośćPrzypadek 90 do 100cell.Offset(0, 1) = "A"Sprawa 80 do 90cell.Offset(0, 1) = "B"Przypadek 70 do 80cell.Offset(0, 1) = "C"Sprawa 60 do 80cell.Offset(0, 1) = "D"Koniec WybierzNapis końcowy |
Przykład 4. Wybierz przypadek - Daty
Ten przykład Case Select to funkcja, która testuje, w którym kwartale przypada data.
123456789101112131415161718 | Data podtestu ()MsgBox GetQuarter(CDate("20.07.2019"))Napis końcowyFunkcja GetQuarter(dt As Date) As IntegerDim sht As WorksheetWybierz przypadek dtSprawa CDate("01.01.2019") Do CDate("31.03.2019")GetQuarter = 1Sprawa CDate("04.01.2019") Do CDate("30.06.2019")GetQuarter = 2Sprawa CDate("07.01.2019") Do CDate("09/30/2019")GetQuarter = 3Sprawa CDate("10.01.2019") Do CDate("31.12.2019")GetQuarter = 4Koniec WybierzKoniec funkcji |
Ponieważ jest to funkcja, możesz jej użyć jako funkcji w programie Excel:
Były. 5 Sprawdź, czy liczba jest nieparzysta czy parzysta
Ten przykład sprawdza, czy liczba jest parzysta czy nieparzysta.
123456789101112 | Sub SprawdźNieparzyste()Dim n jako liczba całkowitan = InputBox("Wprowadź liczbę")Wybierz przypadek n Mod 2Sprawa 0MsgBox "Liczba parzysta."Przypadek 1MsgBox "Liczba jest nieparzysta."Koniec WybierzNapis końcowy |
Były. 6 Sprawdź, czy data jest w dzień powszedni czy w weekend
Te przykłady sprawdzą, czy data wypada w dzień powszedni, czy w weekend.
123456789101112131415161718192021 | Sub Dzień Tygodnia()Dim dt As Datedt = CDate("1/1/2020")Wybierz dzień tygodnia sprawy (dt)Sprawa vbMondayMsgBox "Jest poniedziałek"Sprawa vbWtorekMsgBox "Jest wtorek"Sprawa vbŚrodaMsgBox "Jest Środa"Sprawa vbCzwartekMsgBox "Jest czwartek"Sprawa vbFridayMsgBox "Jest piątek"Sprawa vbSaturdayMsgBox "Jest sobota"Sprawa vbSundayMsgBox "Jest niedziela"Koniec WybierzNapis końcowy |
123456789101112 | Sub CheckWeekend()Dim dt As Datedt = CDate("1/1/2020")Wybierz dzień tygodnia sprawy (dt)Sprawa vbSaturday, vbSundayMsgBox "Jest weekend"Przypadek innyMsgBox "To nie weekend"Koniec WybierzNapis końcowy |
VBA Wybierz przypadek w programie Access
Wszystkie powyższe przykłady działają dokładnie tak samo w Access VBA, jak w Excel VBA.
123456789101112131415161718192021 | Podrzędna wartość komórki testowej()Dim dbs jako baza danychPrzyciemnij najpierw jako zestaw rekordówUstaw dbs = Bieżąca baza danychUstaw rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)Z pierwszym.Najpierw przesuń.EdytowaćWybierz przypadek rst.Fields("Miasto")Sprawa "Austin".rst.Fields("TelCode") = "512"Sprawa "Chicago".rst.Fields("TelCode") = "312"Sprawa "Nowy Jork".rst.Fields("TelCode") = "1212"Sprawa "San Francisco".rst.Fields("TelCode") = "415"Koniec Wybierz.AktualizacjaKończyć zZakończ Sus |