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 instrukcji2. 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:
Sub zadDniTYG() Dim Dzien As Variant Dzien = InputBox("podaj nr dnia w tygodniu") If IsNumeric(Dzien) = True Then Select Case Dzien Case Is > 7 MsgBox ("tydzien ma tylko 7 dni") Case Is < 1 MsgBox ("tydzien ma tylko 7 dni") Case Is = Dzien MsgBox WeekdayName(Dzien, False, vbMonday) End Select Else MsgBox ("podaj dane liczbowe") End If End SubZad. 1
Sub SprawdzPelnoletnosc() Dim Wiek As Variant Wiek = InputBox("Wprowadź swój wiek") If IsNumeric(Wiek) = True Then Select Case Wiek Case Is < 0 MsgBox "Nie możesz mieć mniej niż 0 lat, wprowadź prawidłowy wiek" Case Is > 100 MsgBox "Nie możesz mieć więcej niż 100 lat, wprowadź prawidłowy wiek" Case Is < 18 MsgBox "Jesteś niepełnoletni" Case Is >= 18 MsgBox "Jesteś pełnoletni" Case Else MsgBox "Wprowadzasz nieprawidłowe dane, wprowadź prawidłowy wiek" End Select Else MsgBox "Wprowadzasz nieprawidłowe dane, wprowadź prawidłowy wiek" End If End SubZad. 2
Sub DzienTygodnia() Dim Day As Variant Day = InputBox("Wprowadź numer dnia tygodnia") Select Case Day 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 "Wartość jest błędna. Wprowadź wartość liczbową z przedziału 1-7" End Select End Sub