Oświadczenie dotyczące wyboru przypadku VBA

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

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave