반응형
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
반응형
'프로젝트 및 실습 > VBA' 카테고리의 다른 글
[VBA] Optional Arguments (0) | 2022.08.02 |
---|---|
[VBA] Do While과 Do Until (0) | 2022.08.02 |
[VBA] User-Defined Data Types (사용자 정의 데이터 타입) (0) | 2022.08.02 |
[VBA] 배열(Array) 사용하기 (0) | 2022.08.02 |
[VBA] Comment Object 삽입 (0) | 2022.08.01 |