본문 바로가기
언어 참조

Select Case문 사용

2023. 7. 31.

If...Then...Else 문에서 ElseIf를 사용하는 대신 Select Case 문을 사용하여 하나의 식을 여러 다른 값과 비교할 수 있습니다.

Sub SelectCaseExample()
    ' Select Case 문 예제

    Dim score As Integer
    score = 85 ' Let's assume the score is 85

    Select Case score
        Case Is >= 90
            MsgBox "Your grade is A."
        Case Is >= 80
            MsgBox "Your grade is B."
        Case Is >= 70
            MsgBox "Your grade is C."
        Case Is >= 60
            MsgBox "Your grade is D."
        Case Else
            MsgBox "Your grade is F."
    End Select
End Sub

If...Then...Else 문은 각 ElseIf 문에 대해 다른 식을 평가할 수 있지만, Select Case 문은 제어 구조의 맨 위에서 식을 한 번만 평가합니다.

Sub MultiIfExample()
    ' Multi-If 문 예제

    Dim score As Integer
    score = 85 ' Let's assume the score is 85

    If score >= 90 Then
        MsgBox "Your grade is A."
    ElseIf score >= 80 Then
        MsgBox "Your grade is B."
    ElseIf score >= 70 Then
        MsgBox "Your grade is C."
    ElseIf score >= 60 Then
        MsgBox "Your grade is D."
    Else
        MsgBox "Your grade is F."
    End If
End Sub


다음 예제에서는 Select Case 문이 프로시저에 전달된 인수(argument)를 평가합니다. 각 Case 문에는 하나 이상의 값, 값 범위 또는 값과 비교 연산자의 조합이 포함될 수 있습니다. 선택적으로 사용할 수 있는 Case Else 문은 Select Case 문이 Case 문에 나열된 어떤 값과도 일치하지 않을 때 실행됩니다.

Function Bonus(performance, salary)
    Select Case performance
        Case 1
            Bonus = salary * 0.1
        Case 2, 3
            Bonus = salary * 0.09
        Case 4 To 6
            Bonus = salary * 0.07
        Case Is > 8
            Bonus = 100
        Case Else
            Bonus = 0
    End Select
End Function

표현식의 값에 따라 여러 문 그룹 중 하나를 실행합니다.

Syntax
Select Case testexpression
[ Case expressionlist-n [ statements-n ]]
[ Case Else [ elsestatements ]]
End Select

 

testexpression : 필수입니다. 숫자 표현식 또는 문자열 표현식입니다.

expressionlist-n : Select Case 문에는 하나 이상의 Case가 필요합니다.

Case에 나열되는 값들은 다음과 같은 형식으로 구성됩니다

expression, expressionToexpression, Iscomparisonoperator expression.

 

To 키워드

To 키워드는 값의 범위를 지정합니다. To 키워드를 사용하는 경우, 더 작은 값은 To 키워드 앞에 나와야 합니다.

Sub ToKeywordExample()
    Dim age As Integer
    age = 25 ' 나이를 25로 가정합니다.

    Select Case age
        Case 0 To 17
            MsgBox "미성년자입니다."
        Case 18 To 64
            MsgBox "성인입니다."
        Case 65 To 120 ' 잘못된 범위, To 키워드 앞에 작은 값이 와야 합니다.
            MsgBox "노인입니다."
        Case Else
            MsgBox "유효하지 않은 나이입니다."
    End Select
End Sub


비교 연산자와 함께 Is 키워드를 사용하여 값의 범위를 지정할 수 있습니다. Is와 Like를 제외한 비교 연산자와 함께 Is 키워드를 사용하지 않으면, Is 키워드가 자동으로 삽입됩니다.

 

Is 키워드

Sub IsKeywordExample()
    Dim score As Integer
    score = 85 ' 점수를 85라고 가정합니다.

    Select Case score
        Case Is >= 90
            MsgBox "당신의 학점은 A입니다."
        Case Is >= 80
            MsgBox "당신의 학점은 B입니다."
        Case Is >= 70
            MsgBox "당신의 학점은 C입니다."
        Case Is >= 60
            MsgBox "당신의 학점은 D입니다."
        Case Else
            MsgBox "당신의 학점은 F입니다."
    End Select
End Sub

Like 연산자

Sub ExampleSelectCaseWithLike()
    Dim inputText As String
    Dim result As String
    
    inputText = InputBox("문자열을 입력하세요:", "Example Select Case with Like")
    
    Select Case True
        Case inputText Like "A*"
            result = "입력한 문자열은 A로 시작합니다."
        Case inputText Like "*Z"
            result = "입력한 문자열은 Z로 끝납니다."
        Case inputText Like "???"
            result = "입력한 문자열은 3글자입니다."
        Case Else
            result = "입력한 문자열은 위의 조건에 해당하지 않습니다."
    End Select
    
    MsgBox result, vbInformation, "결과"
End Sub

statements-n

 

statements-n : 선택 사항입니다. testexpression이 expressionlist-n의 어떤 부분과 일치하는 경우 하나 이상의 문장이 실행됩니다.

Sub SelectCaseExample()
    Dim fruit As String
    fruit = "바나나" ' 과일을 "바나나"라고 가정합니다.

    Select Case fruit
        Case "사과", "오렌지"
            MsgBox "과일은 사과 또는 오렌지입니다."
        Case "바나나", "포도"
            MsgBox "과일은 바나나 또는 포도입니다."
        Case "딸기", "블루베리"
            MsgBox "과일은 딸기 또는 블루베리입니다."
        Case Else
            MsgBox "과일은 지정된 옵션 중에 없습니다."
    End Select
End Sub

Case Else

 

elsestatements : 선택 사항입니다. testexpression이 Case 절 중 어떤 것과도 일치하지 않는 경우 하나 이상의 문장이 실행됩니다.

Sub ElseStatementsExample()
    Dim dayOfWeek As Integer
    
    dayOfWeek = 8

    Select Case dayOfWeek
        Case 1
            MsgBox "오늘은 일요일입니다."
        Case 2
            MsgBox "오늘은 월요일입니다."
        Case 3
            MsgBox "오늘은 화요일입니다."
        Case 4
            MsgBox "오늘은 수요일입니다."
        Case 5
            MsgBox "오늘은 목요일입니다."
        Case 6
            MsgBox "오늘은 금요일입니다."
        Case 7
            MsgBox "오늘은 토요일입니다."
        Case Else
            MsgBox "오류: 올바른 요일을 입력하세요!"
    End Select
    
End Sub

참고

testexpression이 어떤 Case expressionlist 식과 일치하는 경우 해당 Case 절 뒤에 오는 문장들이 실행되며, 다음 Case 절이 나오거나, 마지막 절의 경우 End Select까지 실행됩니다. 그런 다음 제어는 End Select 다음에 오는 문장으로 이동합니다. 만약 testexpression이 여러 개의 Case 절에서 expressionlist 식과 일치한다면, 첫 번째 일치하는 Case 절 뒤에 오는 문장만 실행됩니다.

Sub MatchingCaseExample()
    Dim month As Integer
    month = 5 ' Let's assume the month is May

    Select Case month
        Case 1
            MsgBox "January"
        Case 2
            MsgBox "February"
        Case 3, 4, 5
            MsgBox "Spring"
        Case 6 To 8
            MsgBox "Summer"
        Case 9 To 11
            MsgBox "Autumn"
        Case 12
            MsgBox "December"
        Case Else
            MsgBox "Invalid month"
    End Select
End Sub

Case Else 절은 testexpression과 다른 Case 선택지의 expressionlist와 일치하지 않을 때 실행될 else 문장을 지정하기 위해 사용됩니다. 필수는 아니지만, 예상치 못한 testexpression 값에 대처하기 위해 Select Case 블록에 Case Else 문장을 포함하는 것이 좋습니다. 만약 어떤 Case expressionlist도 testexpression과 일치하지 않고 Case Else 문장도 없는 경우, 실행은 End Select 다음에 오는 문장에서 계속됩니다.

Sub CaseElseExample()
    Dim grade As String
    
    grade = "Z" ' 잘못된 학점(영문 대문자 A부터 F가 아닌 값)을 가정합니다.

    Select Case grade
        Case "A"
            MsgBox "훌륭합니다! 당신의 학점은 A입니다."
        Case "B"
            MsgBox "잘하셨어요! 당신의 학점은 B입니다."
        Case "C"
            MsgBox "잘하셨습니다! 당신의 학점은 C입니다."
        Case "D"
            MsgBox "더 노력하세요! 당신의 학점은 D입니다."
        Case "F"
            MsgBox "더 열심히 공부해야 합니다. 당신의 학점은 F입니다."
        Case Else
            MsgBox "유효하지 않은 학점입니다. 다시 확인해주세요."
    End Select
End Sub

각 Case 절에서 여러 식 또는 범위를 사용할 수 있습니다. 예를 들어, 다음과 같은 문장은 유효합니다

Case 1 To 4, 7 To 9, 11, 13, Is > MaxNumber

 

Note

Is 비교 연산자는 Select Case 문에서 사용되는 Is 키워드와 동일하지 않습니다.

 

또한 문자열에 대해 범위와 여러 표현식을 지정할 수도 있습니다. 다음 예제에서 Case는 정확히 "everything"과 일치하는 문자열, 알파벳 순서로 "nuts"와 "soup" 사이에 있는 문자열, 그리고 TestItem의 현재 값과 일치하는 문자열에 대응합니다.

Case "everything", "nuts" To "soup", TestItem

Select Case 문은 중첩될 수 있습니다. 중첩된 각 Select Case 문에는 일치하는 End Select 문이 있어야 합니다.

 

중첩된 Select Case

 

중첩된 Select Case 예제 코드 - 1

Sub NestedSelectCaseExample()
    Dim dayOfWeek As Integer
    Dim partOfDay As String

    dayOfWeek = 3 ' Let's assume 3 represents Wednesday

    Select Case dayOfWeek
        Case 1 To 5 ' Weekdays (Monday to Friday)
            partOfDay = "Weekday"
            Select Case TimeValue(Now())
                Case TimeValue("00:00:00") To TimeValue("12:00:00")
                    partOfDay = partOfDay & " Morning"
                Case TimeValue("12:00:01") To TimeValue("18:00:00")
                    partOfDay = partOfDay & " Afternoon"
                Case Else
                    partOfDay = partOfDay & " Evening"
            End Select
        Case 6, 7 ' Weekend (Saturday and Sunday)
            partOfDay = "Weekend"
            Select Case TimeValue(Now())
                Case TimeValue("00:00:00") To TimeValue("12:00:00")
                    partOfDay = partOfDay & " Morning"
                Case TimeValue("12:00:01") To TimeValue("18:00:00")
                    partOfDay = partOfDay & " Afternoon"
                Case Else
                    partOfDay = partOfDay & " Evening"
            End Select
        Case Else ' Invalid day of the week
            partOfDay = "Invalid day"
    End Select

    MsgBox "Today is " & partOfDay
End Sub

중첩된 Select Case 예제 코드 - 2

Sub NestedSelectCaseExample2()
    Dim season As String
    Dim temperature As Double

    season = "Summer" ' Let's assume it's summer
    temperature = 30 ' Let's assume the temperature is 30 degrees Celsius

    Select Case season
        Case "Summer"
            Select Case temperature
                Case Is >= 30
                    MsgBox "It's a hot summer day!"
                Case 25 To 29
                    MsgBox "It's warm outside."
                Case Else
                    MsgBox "It's a mild summer day."
            End Select
        Case "Winter"
            Select Case temperature
                Case Is <= 0
                    MsgBox "It's freezing cold!"
                Case 1 To 5
                    MsgBox "It's chilly outside."
                Case Else
                    MsgBox "It's a cool winter day."
            End Select
        Case Else
            MsgBox "Unknown season."
    End Select
End Sub

이 예에서는 Select Case 문을 사용하여 변수 값을 평가합니다. 두 번째 Case 절에는 평가 중인 변수의 값이 포함되어 있으므로 이와 연결된 문만 실행됩니다.

Sub TestSelectCase()
    Dim Number As Integer
    Number = 8    ' 변수 초기화
    
    Select Case Number    ' Number 평가
        Case 1 To 5    ' 1부터 5 사이의 숫자 (1과 5를 포함)
            Debug.Print "1에서 5 사이"
        Case 6, 7, 8    ' 6부터 8 사이의 숫자
            Debug.Print "6에서 8 사이"
        Case 9 To 10    ' 9 또는 10
            Debug.Print "8보다 큼"
        Case Else    ' 다른 값들
            Debug.Print "1에서 10 사이가 아님"
    End Select
End Sub

다음 예제는 변수 number의 값에 해당하는 라인을 작성하기 위해 Select Case 구문을 사용합니다. 두 번째 Case 문은 number의 현재 값과 일치하는 값을 포함하므로 "6부터 8까지 포함된 범위"를 출력하는 문장이 실행됩니다.

Sub SelectCaseExample()

    Dim number As Integer
    
    number = 7 ' number 변수의 값이 7인 것으로 가정합니다.

    Select Case number
        Case 1 To 5
            MsgBox "1부터 5 사이의 값입니다."
        Case 6 To 8
            MsgBox "6부터 8 사이의 값입니다."
        Case 9 To 10
            MsgBox "9부터 10 사이의 값입니다."
        Case Else
            MsgBox "지정된 범위에 속하지 않는 값입니다."
    End Select
    
End Sub

도움말 출처

 

 

Using Select Case statements (VBA)

Office VBA reference topic

learn.microsoft.com

 

 

Select Case statement (VBA)

Office VBA reference topic

learn.microsoft.com

 

'언어 참조' 카테고리의 다른 글

Function 프로시저 작성  (0) 2023.08.01
Sub 프로시저 작성  (0) 2023.08.01
If...Then...Else 문 사용  (0) 2023.07.31
선언문 작성  (0) 2023.07.31
Visual Basic 문 작성  (0) 2023.07.31