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 |