1. Instrukcja SELECT CASE – wprowadzenie
Kolejną instrukcją obok IF THEN ELSE wykorzystywaną w procesie podejmowania decyzji przez nasz program jest instrukcja SELECT CASE VBA. Instrukcja sprawdza czy wprowadzona do instrukcji dana jest zgodna z warunkami zapisanymi w instrukcji. Na tej podstawie wybierany jest jeden scenariusz w naszym procesie decyzyjnym. Po wyborze scenariusza wykonywane jest działanie zapisane w bloku danego scenariusza Case i instrukcja kończy swoje działanie.Model instrukcji Select CASE VBA wygląda następująco:
Select Case Wartość_wprowadzona Case Wartość_sprawdzana_1 Działanie wykonywane, gdy Wartość_wprowadzona = Wartość_sprawdzana_1 Case Wartość_sprawdzana_2 Działanie wykonywane, gdy Wartość_wprowadzona = Wartość_sprawdzana_2 Case Wartość_sprawdzana_n Działanie wykonywane, gdy Wartość_wprowadzona = Wartość_sprawdzana_n Case Else Działanie wykonywane, gdy żadna z wartości sprawdzanych nie odpowiada wartości wprowadzonej End Select 'zakończenie instrukcji
2. Przykład zastosowania instrukcji Select CASE VBA
Na początek zajmijmy się prostym przykładem. Chcemy, by po wpisaniu w okienku InputBox numeru miesiąca wyświetlał nam się jego opis słowny. Tak więc dla stycznia będzie to liczba 1 , dla lutego 2 itp. W przypadku, gdy wprowadzona wartość będzie wykraczała poza zakres 1-12, bądź też wprowadzona wartość nie będzie liczbą całkowitą otrzymamy komunikat z prośbą o wprowadzenie właściwej wartości.
Sub CaseExample() Dim IntMonthNumber As Variant IntMonthNumber = InputBox("Wprowadź numer miesiąca z przedziału 1-12") Select Case IntMonthNumber Case 1 MsgBox "Styczeń" Case 2 MsgBox "Luty" Case 3 MsgBox "Marzec" Case 4 MsgBox "Kwiecień" Case 5 MsgBox "Maj" Case 6 MsgBox "Czerwiec" Case 7 MsgBox "Lipiec" Case 8 MsgBox "Sierpień" Case 9 MsgBox "Wrzesień" Case 10 MsgBox "Październik" Case 11 MsgBox "Listopad" Case 12 MsgBox "Grudzień" Case Else MsgBox "Wartość jest błędna. Wprowadź wartość liczbową z przedziału 1-12" End Select End Sub
3. Zadania (Rozwiązanie możesz wpisać w komentarzu)
3.1 W oparciu o rozdział kursu dotyczący instrukcji IF THEN ELSE pkt3. zbuduj analogiczny przykład stosując instrukcję Select CASE.
3.2 W oparciu o przykład z tego rozdziału napisz program, który po wprowadzeniu liczby reprezentującej dzień tygodnia zwróci jego wersję słowną.
9 komentarzy “Instrukcja Select CASE w Excel VBA”
chciałem napisać funkcję vba, zamieniającą liczby na tekst. Da się to zrobić jakość za pomocą Case’a?
Sub czypelnoletni()
Dim wiek As Variant
wiek = InputBox(„Podaj wiek”)
Select Case wiek
Case Is < 0
MsgBox („podaj prawidłowe dane”)
Case Is > 200
MsgBox („podaj prawidłowe dane”)
Case Is < 18
MsgBox („niepełnoletni”)
Case Is >= 18
MsgBox („pełnoletni”)
Case Else
MsgBox („Podaj prawidłowe dane”)
End Select
End Sub
Sub CaseExample()
Dim IntMonthNumber As Variant
IntMonthNumber = InputBox(„Wprowadź swój wiek”)
Select Case IntMonthNumber
Case Is < 0
MsgBox „błąd, wartość nieprawidłowa”
Case Is > 100
MsgBox „błąd, wartość za wysoka”
Case Is < 18
MsgBox „niepełnoletni”
Case Is > 18
MsgBox „pełnoletni”
Case Else
MsgBox „Wartość jest błędna.”
End Select
End Sub
3.1
Option Explicit
Sub InstrukcjaWarunkowaSelectCase2()
Dim varAge As Variant
Dim strAnswer As String
varAge = InputBox(„Wprowadź prosze swoj wiek”, „Czy jestes pełnoletni?”)
Select Case varAge
Case Is < 0
strAnswer = „Chyba nie możeszesz miec wieku ujemnego, prawda?”
Case Is > 100
strAnswer = „Gratuluje długowieczności, jednak prosze podaj górną granicę przewidzianą w programie, czyli 100 lat”
Case Is < 18
strAnswer = „Jesteś niepełnoletni”
Case Is >= 10
strAnswer = „Jesteś pełnoletni”
End Select
MsgBox strAnswer
End Sub
3.2
Option Explicit
Sub InstrukcjaWarunkowaSelectCase3()
Dim varWeekDay As Variant
varWeekDay = InputBox(„Podaj liczbę odpowiadająca dniu tygodnia”, „Dzień tygodnia”)
Select Case varWeekDay
Case 1
MsgBox „Poniedziałek”
Case 2
MsgBox „Wtorek”
Case 3
MsgBox „Środa”
Case 4
MsgBox „Czwartek”
Case 5
MsgBox „Piątek”
Case 6
MsgBox „Sobota”
Case 7
MsgBox „Niedziela”
Case Else
MsgBox „Podaj numer dnia tygodnia jako liczby od 1 do 7”
End Select
End Sub
Sub oceny()
Dim punkt As Variant
Dim wynik As String
punkt = InputBox(„wprowadz zdobyte punkty”)
Select Case punkt
Case Is >= 24
MsgBox „ocena bardzo dobra”
Case Is >= 21
MsgBox „ocena dobra”
Case Is >= 16
MsgBox „ocena dostateczna”
Case Is >= 11
MsgBox „ocena mierna”
Case Else
MsgBox „ocena niedosteczna”
End Select
End Sub
Sub dnityg()
Dim dzien As Variant
dzien = InputBox(„podaj nr dnia tygodnia”)
Select Case dzien
Case 1
MsgBox „Poniedziałek”
Case 2
MsgBox „wtorek”
Case 3
MsgBox „środa”
Case 4
MsgBox „czwartek”
Case 5
MsgBox „piątek”
Case 6
MsgBox „sobota”
Case 7
MsgBox „niedziala”
Case Else
MsgBox „Wprwadź wartość od 1 do 7”
End Select
End Sub
Wasze programy nie uwzględniają wartości innej niż liczbowa. Można użyć if żeby sprawdzić czy podana wartość jest numerem.
Sub Case_Ćwiczenie()
Dim wiek As Variant
wiek = InputBox(„Podaj swój wiek”)
If IsNumeric(wiek) = True Then
Select Case wiek
Case Is < 18
MsgBox „Niepełnoletni”
Case Is >= 18
MsgBox „Pełnoletni”
End Select
Else:
MsgBox („Wartość jest błędna. Wprowadź wartość liczbową”)
End If
End Sub
Trochę inne rozwiązanie na zadanie z dniami tygodnia:
Zad. 1
Zad. 2