값에 따른 처리를 할 때는 If문보다는 Select Case문을 사용하는 것이 편리합니다.
1. 구문
가. 구문
select case 문 다음에 있는 testexpression은 비교 대상을 설명하는 변수명이 되고,
Case expressionlist-n은 변수명과 비교할 값의 나열이며,
statements-n은 실행문이며, 여러 줄이 될 수 있습니다.
Case Else는 If문의 else와 같이 위의 조건에 모두 충족되지 않는 경우 실행됩니다.
elsestatements는 Case Else 조건에 부합할 경우 실행되는 문장입니다.
Select Case 조건문은 End Select로 끝납니다.
나. case 다음의 비교할 값 표시 방법
① 숫자 하나 입력 : case 2 식으로 case 다음에 값 입력
② 숫자 2개이상 입력
- 컴마 사용 : 1,3,5,7,9
- to 사용 : 1 to 3 식으로 입력하면 1부터 3까지가 됩니다.
③ 이상, 이하 등 입력
is 다음에 >(크다), >=(이상), <(작다), <=(이하), =(같음) 을 입력한 다음 숫자 입력
예) case is >= 9 식으로 입력하면 9이상인 경우가 됩니다.
2. 사용 예제
(예제 1)
먼저 개발도구 - Visual Basic 명령을 클릭해서 Visual Basic 에디터를 실행한 다음
삽입 아이콘을 누른 후 모듈을 추가하고
오른쪽 코드창에 아래와 같이 코드를 작성하고
Sub selectcase1()
Select Case Range("a1")
Case 1
Range("b1") = "A1셀의 값은 1입니다."
Case Else
Range("b1") = "A1셀의 값은 1이 아닙니다."
End Select
End Sub
위쪽 표준 도구모음에서 엑셀 모양 아이콘을 눌러 엑셀로 돌아간 다음
개발도구 - 매크로 명령을 누른 후
매크로 목록에서 selectcase1을 찾아 더블 클릭하거나 클릭하고 실행버튼을 누릅니다.
그러면 A1셀의 값이 없기 때문에 1에 해당하지 않아 Case Else에 해당하는 "A1셀의 값은 1이 아닙니다"가 B1셀에 입력됩니다.
A1셀에 1을 입력한 다음 selectcase1매크로를 실행하면
(예제 2)
Sub selectcase2()
Select Case Range("a2")
Case 90 To 100
Range("b2") = "A학점"
Case 80 To 90
Range("b2") = "B학점"
Case 70 To 80
Range("b2") = "C학점"
Case 60 To 70
Range("b2") = "D학점"
Case 0 To 60
Range("b2") = "F학점"
Case Else
Range("b2") = "0점에서 100점 사이로 입력해 주세요."
End Select
End Sub
Select Case문에서는 and 연산자를 사용할 수 없으므로
case is >=90 and is<=100 이라고 할 수 없고
case 90 to 100 이라고 입력합니다.
(경우 1)
A2셀에 80점을 입력하고 매크로를 실행하게 되면
두번째와 세번째 case문을 모두 충족하지만,
순서대로 실행하므로 두번째 case문이 충족되면
세번째 case문의 충족여부는 판단하지 않고
Select Case문을 끝내게 되므로
B학점이 B2셀에 입력됩니다.
(경우 2)
그러나, A2셀에 71이라고 입력하고
selectcase2 매크로를 실행하면
세번째 case문 70과 80점 사이이기 때문에
B2셀에 C학점이라고 입력됩니다.
(경우 3)
A1셀에 150이라고 입력하고 selectcase2 매크로를 실행하면 B2셀에 "0점에서 100점 사이로 입력해 주세요."라고 입력됩니다.
(경우 4)
두번째 조건문 case 80 to 90을 case is >= 80 으로 수정하고
A2셀에 150을 입력하면 150은 80보다 크므로
두번째 case문을 충족하여 B학점이 되고,
case else문은 실행되지 않으므로 주의해야 합니다.
(예제3)
짝,홀수를 판단할 때는 Mod연산자를 사용할 수도 있고, worksheet 함수인 IsEven을 사용할 수도 있습니다. IsEven은 VBA 함수가 아니기 때문에 worksheetfunction.iseven 이라고 앞에 worksheetfunction.을 붙여야 합니다.
(Mod 연산자 이용)
Sub selectcase3()
Select Case Range("a3") Mod 2
Case 0
Range("b3") = "짝수"
Case Else
Range("b3") = "홀수"
End Select
End Sub
(IsEven WorksheetFunction 사용)
Sub selectcase4()
Select Case WorksheetFunction.IsEven(Range("a3"))
Case True
Range("b3") = "짝수"
Case Else
Range("b3") = "홀수"
End Select
End Sub
A3셀에 홀수 또는 짝수를 입력한 후 selectcase3 또는 select case4 매크로를 실행하면 b3셀에 홀수 또는 짝수라고 입력됩니다.
(예제4)
아래와 같이 코드를 작성한 매크로를 실행하면
Sub selectcase5()
Dim intA As Integer
intA = Application.InputBox("1에서 10사이로 입력하세요", Type:=1)
Range("a4") = intA
Select Case intA
Case 1, 2, 3, 5, 7
Range("b4") = "소수"
Case 4, 6, 8, 9, 10
Range("b4") = "소수 아님"
Case Else
Range("b4") = "1에서 10사이로 입력"
End Select
End Sub
"1에서 10사이로 입력하세요"란 메시지가 표시되는데, 그 아래 입력칸에 숫자를 입력하면
입력값이 A4셀에 입력되고, 숫자에 해당하는 case문에 따라 적절한 값이 B4셀에 입력됩니다.
(예제 5)
숫자뿐만 아니라 문자도 비교할 수 있습니다.
Sub selectcase6()
Select Case Range("a5")
Case "토끼", "돼지"
Range("b5") = "집 짐승"
Case "멧돼지", "기린"
Range("b5") = "들 짐승"
End Select
End Sub
A5셀을 선택한 후 데이터 탭의 유효성 검사 명령을 누르고,
제한 대상에서 목록을 선택한 다음, 원본에 "토끼,돼지,멧돼지,기린"이라고 입력하고 확인 버튼을 누릅니다.
그러면 A5셀 오른쪽에 콤보 상자 버튼이 생기므로 그 버튼을 누르고, 그 중에서 선택하면 "집 짐승" 또는 "들 짐승"이라고 입력됩니다.
'EXCEL - VBA' 카테고리의 다른 글
For ~ Next 반복문 (0) | 2022.11.11 |
---|---|
VBA 조건문(3) - Select Case(2) - 사용자 정의함수 만들기 (0) | 2022.11.08 |
VBA 조건문(1) - If (0) | 2022.11.04 |
엑셀 VBA에서 셀 또는 범위 지정하기(3) - 여러 셀 또는 떨어진 셀 (0) | 2022.11.03 |
엑셀 VBA에서 셀 또는 범위 지정하기(2) - Cells (0) | 2022.10.31 |