프로젝트 및 실습/VBA

[VBA] Select Case Construct (Switch문)

jooona 2022. 8. 2. 20:55
반응형

VBA에서는 다른 언어에서 Switch를 이용해 여러 조건을 동시에 필터링하는 기능을 Select Case 문을 이용해 사용할 수 있습니다.

 

기본 문법

 

Sub Select_Case_Example()

    Dim Num As Integer
    Num = Rnd() Mod 10 '0~9 랜덤 값 생성
    
    Select Case Num
        Case Num < 5
            MsgBox "Num is Smaller Than 5"
        Case Num = 5
            MsgBox "Num is 5"
        Case Else
            MsgBox "Num is Bigger Than 5"
    End Select
    
End Sub

 

기본적으로 Select Case {Expression}과 End Select 사이에 원하는 조건들을 Case 뒤에 삽입하는 방식으로 구현이 이루어집니다. 

 

가장 상단의 Case문부터 필터링이 시작되며, 마지막에 Case Else를 통해 아무 조건에도 해당되지 않는 경우 실행될 명령을 추가할 수 있습니다.

 

또는 다음과 같이 Case Is를 사용해서 변수를 생략할 수도 있습니다.

 

Sub Select_Case_Example()

    Dim Num As Integer
    Num = Rnd() Mod 10 '0~9 랜덤 값 생성
    
    Select Case Num
        Case Is < 5
            MsgBox "Num is Smaller Than 5"
        Case Is = 5
            MsgBox "Num is 5"
        Case Else
            MsgBox "Num is Bigger Than 5"
    End Select
    
End Sub

 

같은 방식으로 Integer가 아닌 다른 데이터 타입에 대한 조건도 사용할 수 있습니다.

 

Sub Select_Case_Example2()
    
    Dim country As String
    country = InputBox("Where are you from?: ")
    
    Select Case country
        Case ""
            Exit Sub
        Case "Korea"
            MsgBox "You are Korean"
        Case Else
            MsgBox "You are not Korean"
    End Select
    
End Sub

 


응용

 

- Time

Sub Select_Case_Example3()

    Select Case Time
        Case Is < 0.5
            MsgBox "Good Morning"
        Case 0.5 To 0.75
            MsgBox "Good Afternoon"
        Case Else
            MsgBox "Good Evening"
    End Select

End Sub

 

Time 함수를 이용해 현재의 시간을 0~1 사이의 값으로 반환할 수 있습니다. 

 

- Weekday

Sub Select_Case_Example4()

    Select Case Weekday(Now)
        Case 2, 3, 4, 5, 6
            MsgBox "You must go to work"
        Case Else
            MsgBox "Take Rest"
    End Select
    
End Sub

 

Weekday(Now) 함수를 이용해 오늘의 요일을 반환하여 활용할 수 있습니다. Weekday() 함수는 일요일을 1, 월요일을 2... 의 형태로 정수 값을 반환합니다.

 

- Range

Sub Select_Case_Example5()

    Select Case TypeName(Selection)
        Case "Range"
            Select Case Selection.Count
                Case 1
                    MsgBox "One cell is selected"
                Case Else
                    MsgBox Selection.rows.Count & " rows"
            End Select
        Case "Nothing"
            MsgBox "Nothing is selected"
        Case Else
            MsgBox "Something other than a range"
    End Select
    
End Sub

 

TypeName(Selection) 함수를 이용해 엑셀에서 선택된 Cell의 크기를 알아낼 수 있습니다.

 

 

Reference: Excel 2010 Power Programming With VBA / John Walkenbach

반응형