VBA Select Case 문

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 5월 2, 2023

VBA에서 Select Case 문If-Then 문의 대체 구문으로, 각 조건에 대해 특정 코드를 실행하여 조건이 충족되는지 테스트할 수 있습니다. 처리할 조건이 여러 개 있는 경우 Select 문이 If 문보다 좋습니다.

Select Case 예제

이 예는 사용자에게 YesNoCancel 메시지 박스를 표시하고 사용자가 어떤 옵션을 선택했는지 테스트합니다:

Sub Select_Case_Yes_No_Cancel()
    Dim nResult As VbMsgBoxResult
    
    nResult = MsgBox("...", vbYesNoCancel)
    
    Select Case nResult
        Case vbYes
            MsgBox "예"
        Case vbNo
            MsgBox "아니오"
        Case vbCancel
            MsgBox "취소"
    End Select
End Sub

아래에서는 대신 If 문을 사용하여 동일한 내용을 작성했습니다. Case Select 문을 사용하면 타이핑이 약간 줄어드는 것을 알 수 있으며, 여러 기준을 테스트할 때 이러한 이점이 더욱 커집니다.

Sub If_Yes_No_Cancel()
    Dim nResult As VbMsgBoxResult
    
    nResult = MsgBox("...", vbYesNoCancel)
    
    If nResult = vbYes Then
        MsgBox "예"
    ElseIf nResult = vbNo Then
        MsgBox "아니오"
    ElseIf nResult = vbCancel Then
        MsgBox "취소"
    End If
End Sub

Select Case 구문

Select Case 구문은 다음과 같습니다:

Select Case [Test Expression]
    Case [Condition 1]
        [Action if condition 1 is true]
    Case [Condition 2]
        [Action if condition 2 is true]
    Case [Condition n]
        [Action if condition n is true]
    Case Else
        [Action if none are true]
End Select

[Test Expression] – 평가할 기준 값입니다. 일반적으로 변수입니다.

[Action if condition n is true] – 조건이 충족되면 실행할 코드입니다(If 문과 동일합니다).

[Condition n] – 기준 값에 대한 조건입니다. 기준 값을 충족하는지 테스트하는 방법에는 여러 가지가 있습니다. 아래에서 이에 대해 설명하겠습니다.

Case 문은 TRUE로 확인된 첫 번째 조건에 대한 코드를 실행합니다. 충족되는 조건이 없을 경우 Else 절을 추가하지 않으면 코드가 실행되지 않습니다.

Select Case 기준

Select Cases는 숫자 값과 텍스트를 모두 평가하는 데 사용할 수 있습니다. 먼저 Select Case를 사용하여 숫자 표현식을 평가하는 방법에 대해 설명하겠습니다.

정확히 일치하는 숫자 확인하기

Case문으로 숫자가 정확히 일치하는지 쉽게 테스트할 수 있습니다:

Case 10

콤마를 사용하여 여러 숫자 조건에 부합하는지 확인할 수도 있습니다:

Case 20, 30, 40
Sub ExactMatch_Numbers()
    Dim n As Integer
    n = CInt(InputBox("..."))
    
    Select Case n
        Case 10
            ' n이 10일 경우 수행할 코드
        Case 20, 30, 40
            ' n이 20/30/40일 경우 수행할 코드
        Case Else
            ' n이 10/20/30/40일 경우 수행할 코드
    End Select
    
End Sub

범위

숫자가 다음과 같은 범위에 속하는지 테스트할 수 있습니다:

Case 55 To 74

이 프로시저는 숫자 점수(0~100)를 기준으로 학생들의 문자 점수(A~F)를 생성합니다:

Sub Calc_Grade()
Dim Score       As Integer
Dim LetterGrade As String

    Score = InputBox("숫자 점수를 입력하세요")
    
    Select Case Score
        Case 90 To 100
            LetterGrade = "A"            
        Case 80 To 90
            LetterGrade = "B"           
        Case 70 To 80
            LetterGrade = "C"            
        Case 60 To 70
            LetterGrade = "D"            
        Case Else
            LetterGrade = "F"
    End Select
    
    MsgBox "변환된 학점 : " & LetterGrade
    
End Sub

Case Is문을 활용하여 범위를 테스트할수도 있습니다.

Select Case Is

Case is < 55
  '실행할 코드가 없습니다
Case <= 74
 MsgBox "범위 내에 있습니다"

Case 문은 첫 번째로 일치하는 Case에 대해서만 코드를 실행한다는 점을 기억하세요.

이 절차는 Case To 대신 Case Is를 사용하여 학생의 성적을 변환합니다.

Sub Select_Case_Is_Grade()
    Dim Score      As Integer
    Dim LetterGrade As String
    
    Score = InputBox("학생의 점수를 입력하세요")
    
    Select Case Score
        Case Is >= 90
            LetterGrade = "A"            
        Case Is >= 80
            LetterGrade = "B"            
        Case Is >= 70
            LetterGrade = "C"            
        Case Is >= 60
            LetterGrade = "D"            
        Case Else
            LetterGrade = "F"
    End Select
    
    MsgBox "변환된 학점 : " & LetterGrade
    
End Sub

Case Else

조건이 충족되지 않는 경우 어떤 작업을 수행하기 위해 Case 문 끝에 “Case Else”를 추가할 수 있습니다:

Case Else

이전 코드 예제 끝부분에서 Case Else를 어떻게 사용했는지 확인하세요.

Select Case – 텍스트와 Like 연산자 사용하기

위의 Select Case 예제들은 숫자의 경우만 확인해 보았습니다. 텍스트와 함께 Select Case 문을 사용할 수도 있습니다.

정확히 일치하는 텍스트 확인하기

표현식이 다음 예제와 같이 정확한 구문과 일치하는지 테스트할 수 있습니다:

Case "Beets"

또는 쉼표를 사용하여 표현식이 두 개 이상의 구문과 정확히 일치하는지 테스트할 수 있습니다:

Case "Apple", "Banana", "Orange"

예제 코드는 다음과 같습니다:

Sub ExactMatch_Food()

Select Case Range("a1").Value
    Case "Beets"
        MsgBox "Vegetable"
    Case "Apple", "Banana", "Orange"
        MsgBox "Fruit"
End Select

End Sub

대문자 및 소문자

기본적으로 VBA는 대소문자를 구분합니다. 즉, VBA는 “Text”를 “text”와 다르게 간주합니다. 대소문자 구분을 끄려면 모듈 상단에 Option Compare Text를 추가합니다:

Option Compare Text

이 예제는 Case 문으로 텍스트 작업 시 대소문자를 구분하지 않습니다:

Option Compare Text

Sub ExactMatch_Food()

Select Case Range("a1").Value
    Case "Beets"
        MsgBox "Vegetable"
    Case "Apple", "Banana", "Orange"
        MsgBox "Fruit"
End Select

End Sub

Case문에서 Like 연산자 활용하기

Like 연산자를 사용하면 일부만 일치하는 항목에 대한 비교를 할 수 있습니다. 텍스트가 일치하는 경우 Like 연산자는 TRUE를 반환하고 일치하지 않는 경우 FALSE를 반환합니다. 따라서 Like 연산자는 If 문에서 쉽게 사용할 수 있지만 Case 문에서 활용하기는 쉽지 않습니다.

Case 문에서 Like 연산자 활용하기 – 잘못 사용한 경우

다음 예제 코드는 Like 연산자가 Select Case 문에서 정상적으로 작동하지 않는다는 것을 보여줍니다:

Sub Select_Case_Like_DoesnotWork()
    Dim word As String
    word = "COCOA"
    
    Select Case word
        Case word Like "*C*C*"
            MsgBox "Good"
        Case Else
            MsgBox "Not Good"
    End Select
End Sub

Case 문에서 Like 연산자 활용하기 – 정상적으로 사용한 경우

TRUE 표현식을 추가하여 Select 문이 Like 연산자와 함께 작동하도록 할 수 있습니다:

Sub Select_Case_Like_CorrectWay()
    Dim word As String
    word = "COCOA"
    
    Select Case True
        Case word Like "*C*C*"
            MsgBox "Good"
        Case Else
            MsgBox "Not Good"
    End Select
End Sub

Case 문에서 콜론 활용하기

Case 문을 사용할 때는 각 조건에 대해 실행할 코드를 원하는 만큼 추가할 수 있습니다. 한 줄의 코드만 실행할 경우. 콜론(:)을 사용하여 코드를 간결하게 표현할 수 있습니다.

다음 예제 코드는 위에서 사용했던 것과 동일한 예제입니다. 학생 성적을 변환하는 예제인데 아래 코드에서 좀더 간결하게 보이도록 콜론을 사용하였습니다:

Sub Calc_Grade_colon()
Dim Score      As Integer
Dim LetterGrade As String

    Score = InputBox("학생의 점수를 입력하세요")
    
    Select Case Score
        Case 90 To 100: LetterGrade = "A"
        Case 80 To 90: LetterGrade = "B"
        Case 70 To 80: LetterGrade = "C"
        Case 60 To 70: LetterGrade = "D"
        Case Else: LetterGrade = "F"
    End Select
    
    MsgBox "변환된 학점 : " & LetterGrade
    
End Sub

 

Case Select 문- And/ Or로 다양한 조건 적용하기

And / Or 연산자를 사용하여 Select Case와 함께 추가 조건을 적용할 수 있습니다.

아래 예제 코드에서는 ‘age’ 변수에 Select Case를 사용하고 있습니다. 성별조건도 추가하고 싶을 경우 And 연산자를 사용하여 더 복잡한 조건을 적용할 수 있습니다:

Sub NestedSelectCase()
    Dim sex As String
    Dim age As Integer
    
    sex = "남자" ' 또는 여자
    age = 15
    
    Select Case age
        Case Is < 20 And sex = "남자"
            Msgbox "20대 미만 남자"
        Case Is < 20 And sex = "여자"
            Msgbox "20대 미만 여자"        
        Case Is >= 20 And sex = "남자"
            Msgbox "20대 이상 남자 
        Case Is >= 20 And sex = "여자"
            Msgbox "20대 이상 여자" 
    End Select
End Sub

중첩된 Case 문

If 문과 마찬가지로 Case 문도 서로 중첩할 수 있습니다:

Sub NestedSelectCase()
    Dim sex As String
    Dim age As Integer
    
    sex = "남자" ' 또는 여자
    age = 15
    
    Select Case age
        Case Is < 20
            Select Case sex
                Case "남자"
                    MsgBox "20대 미만 남자"
                Case "여자"
                    MsgBox "20대 미만 여자"
            End Select
        Case Is >= 20
            Select Case sex
                Case "남자"
                    MsgBox "20대 이상 남자"
                Case "female"
                    MsgBox "20대 이상 여자"
            End Select
    End Select
End Sub

Case 문과 If 문

테스트할 조건이 많을수록 Case 문이 If 문에 비해 더 유용합니다. 예제를 살펴보겠습니다.

다음은 If 문을 사용하여 특정한 이름 목록에 워크시트 이름이 포함되는지 확인하기 위한 코드입니다:

If Name = "Budget" Or Name = "Forecast" Or Name = "Trailing12" Or _
   Name = "Flex" Or Name = "OtherRatios" Or Name = "Comparison" Or _
   Name = "BudReview" Or Name = "P&L_Review" Or Name = "Other" Then
   '실행할 코드
End If

다음은 Select 문을 사용하는 동일한 코드입니다:

Select Case Name
Case "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _
     "Comparison", "BudReview", "P&L_Review", "Other"
    'Do Something
End Select

위 예제에서는 Select 문을 사용하는 것이 훨씬 더 쉽다는 것을 알 수 있습니다. 타이핑이 훨씬 적고 가독성도 좋습니다.

VBA Select Case 예제

예제1. Case 문을 활용한 사용자 정의 함수(UDF)

위의 성적 계산 예제를 활용하여 학생의 점수를 계산하는 사용자 정의함수(UDF)를 만들어 보겠습니다:

Function GetGrade(Score As Integer) As String
    
    Select Case Score
        Case 90 To 100
            GetGrade = "A"            
        Case 80 To 90
            GetGrade = "B"            
        Case 70 To 80
            GetGrade = "C"            
        Case 60 To 70
            GetGrade = "D"           
        Case Else
            GetGrade = "F"
    End Select
    
End Function

이제 Excel 워크시트에서 GetGrade 함수를 사용하여 학생 성적을 빠르게 계산할 수 있습니다:

vba case select

 

예제2. Case 문을 활용하여 워크시트 이름 확인하기

이 코드는 통합 문서의 모든 워크시트를 반복하여 특정 기준을 충족하는 시트의 보호를 해제합니다:

Sub Case_UnProtectSheet()
    Dim ws As Worksheet
    
    For Each ws In Worksheets
        Select Case ws.Name    'List of all sheets with Ratios
        Case "Budget", "Forecast", "Trailing12", "Flex", "OtherRatios", _
             "Comparison", "BudReview", "P&L_Review", "Other"
            ws.Unprotect
        End Select
    Next ws
    
End Sub

예제3. Select Case – 셀 값 확인하기

이 예는 셀에서 학생의 점수를 확인하여 오른쪽 셀에 문자 성적을 출력합니다.

Sub TestCellValue()
    Dim cell As Range
    Set cell = Range("C1")

    Select Case cell.Value
    Case 90 To 100
        cell.Offset(0, 1) = "A"
    Case 80 To 90
        cell.Offset(0, 1) = "B"
    Case 70 To 80
        cell.Offset(0, 1) = "C"
    Case 60 To 80
        cell.Offset(0, 1) = "D"
    End Select

End Sub

예제4. Select Case – 날짜 확인하기

아래의 Select  Case 문 예제는 날짜가 어느 분기에 속하는지 테스트하는 함수입니다.

Sub TestDate ()
 MsgBox GetQuarter(CDate("7/20/2019"))
End Sub

Function GetQuarter(dt As Date) As Integer
    Dim sht As Worksheet

    Select Case dt
        Case CDate("01/01/2019") To CDate("03/31/2019")
            GetQuarter = 1
        Case CDate("04/01/2019") To CDate("06/30/2019")
            GetQuarter = 2
        Case CDate("07/01/2019") To CDate("09/30/2019")
            GetQuarter = 3
        Case CDate("10/01/2019") To CDate("12/31/2019")
            GetQuarter = 4
    End Select
End Function

함수로 정의했으므로 Excel 내에서 사용할 수 있습니다:

vba case select date example

예제5. 홀수 및 짝수 확인하기

아래 예제는 숫자가 홀수인지 짝수인지 테스트합니다.

Sub CheckOddEven()
    Dim n As Integer
    n = InputBox("숫자를 입력하세요")
    
    Select Case n Mod 2
        Case 0
            MsgBox "짝수입니다."
        Case 1
            MsgBox "홀수입니다."
    End Select
    
End Sub

예제6. 날짜가 평일인지 주말인지 확인하기

아래 예제는 날짜가 평일인지 주말인지 테스트합니다.

Sub CheckWeekDay()
    Dim dt As Date
    dt = CDate("1/1/2020")
    
    Select Case Weekday(dt)
        Case vbMonday
            MsgBox "월요일 입니다"
        Case vbTuesday
            MsgBox "화요일 입니다"
        Case vbWednesday
            MsgBox "수요일 입니다"
        Case vbThursday
            MsgBox "목요일 입니다"
        Case vbFriday
            MsgBox "금요일 입니다"
        Case vbSaturday
            MsgBox "토요일 입니다"
        Case vbSunday
            MsgBox "일요일 입니다"
    End Select
End Sub
Sub CheckWeekend()
    Dim dt As Date
    dt = CDate("1/1/2020")
    
    Select Case Weekday(dt)
        Case vbSaturday, vbSunday
            MsgBox "주말입니다"
        Case Else
            MsgBox "평일입니다"
    End Select

End Sub

Access VBA에서 Select Case 문 활용하기

위의 모든 예제는 Excel VBA에서와 마찬가지로 Access VBA에서도 똑같이 작동합니다.

Sub TestCellValue()
    Dim dbs as Database
    Dim rst as RecordSet
    Set dbs = CurrentDB
    Set rst = dbs.OpenRecordset("tblClients", dbOpenDynaset)
    With rst
       .MoveFirst
       .Edit
       Select Case rst.Fields("City")
       Case "Austin"
           .rst.Fields("TelCode") = "512" 
       Case "Chicago"
           .rst.Fields("TelCode") = "312" 
       Case "New YorK"
           .rst.Fields("TelCode") = "1212" 
       Case "San Fransisco"
           .rst.Fields("TelCode") = "415" 
    End Select
    .Update
   End With
End Sus

 

vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기