세진세상

VBA 조건문(If, Select Case) 본문

VBA

VBA 조건문(If, Select Case)

세진세상 2018. 1. 29. 20:57

VBA 조건문.


조건문이라 그러니까 영어 공부하던 시절에 문법이 떠오르며, 으으으 벌써 싫다고 할 수 있다.

어쩌면 그 영어 문법보다 더 싫을 수 있지만, 프로그래밍에서 조건문의 비중은 상당히 높다.

그만큼 철저히 익히고, 자주 연습해야 한다.


그렇게 부르니까 거창하게 조건문이지, 사실 일상에서 이 조건문의 구조를 쉽게 찾아볼 수 있다.

이를테면, 신호등에 빨간 불이 들어오면 멈추고, 파란 불이 들어오면 건넌다.

이런게 조건문이다. 일정 조건에 따라 그 조건에 해당되는 구문을 수행하는 것이다.


IF

가장 보편적으로 사용되는 조건문은 IF문이다.

VBA IF문의 구조를 살펴보자.


If 조건 1 Then

수행 코드(조건 1이 참일 경우 수행)

ElseIf 조건 2 Then

수행 코드(조건 1일 거짓이고, 조건 2가 참일 경우 수행)

Else

수행코드(어느 조건도 참이 아닐 경우 수행)

End If


이 구조에서 ElseIf 나 Else는 불필요한 경우 작성하지 않아도 된다.


숫자가 양수인지 음수인지 구분하는 조건문을 만들보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
Sub if_ex1()
    Dim N As Double
    N = 1
    
    If N > 0 Then
        Debug.Print "N is positive."
    ElseIf N < 0 Then
        Debug.Print "N is negative."
    Else
        Debug.Print "N is zero."
    End If
           
End Sub
cs


N은 1이므로 첫번째 조건을 만족하며, 양수라는 메시지가 출력된다.



IF문을 사용할 때 초심자들이 주로 실수하는 부분이 있는데,

바로 조건을 나눌 때, 순서를 미쳐 생각하지 않는다는 것이다.


무슨 말이냐 하면, 조건들 사이에 교집합이 존재하게 조건을 설정할 경우,

코드의 프로세스는 처음 만족되는 조건에 대해 수행하고, 나머지는 무시하게 된다.


예를 들어, 점수가 4점 이상이면 A, 2점 이상이면 B, 나머지는 C의 성적을 받는다고 하자.

이를 조건문으로 만들 때, > 부등호를 사용해서 코드를 작성한다면 위에서부터 아래로 구분지어야 한다.

그렇지 않고 반대로 작성한다면 이러한 결과가 나타난다.


1
2
3
4
5
6
7
8
9
10
11
12
13
Sub if_ex2()
    Dim N As Double
    N = 7
    
    If N > 0 Then
        Debug.Print "C"
    ElseIf N > 3 Then
        Debug.Print "B"
    ElseIf N > 5 Then
        Debug.Print "A"
    End If
    
End Sub
cs

 


점수가 7점임에도 불구하고, 첫번째 N > 0의 조건을 만족하여 C로 처리되어 버렸다.

그렇기 때문에 차순을 정확하게 설정하거나, 겹치는 경우가 전혀 발생하지 않도록 조건을 나눠야 한다.

IF문에 대한 설명은 이 정도로 마치고,  SELECT CASE 문을 알아보자.


SELECT CASE

보편적이지는 않지만, 코드를 보면 조금 더 직관적인 조건문이다.


Select Case 조건의 대상

Case 조건 1

수행 코드(조건 1이 참일 경우 수행)

Case 조건 2

수행 코드(조건 2가 참일 경우 수행)

Case Else

수행 코드(어느 조건도 만족하지 않을 경우 수행)

End Select


정말 직관적인데, 왜 IF문이 더 보편적인가요??

라고 물어도 사실 딱히 할 말은 없다. 혹자는 효율이 더 좋다 어떠하다 그러는데;; 거기까진 모르겠다.

마치 신메뉴 나왔지만, 먹던 걸로 주세요 같은 느낌이거나, 코딩을 시키는 사람 또는 하는 사람 마음일거다. 


Select 문을 실습해보겠다.

하나의 숫자을 지정하고, 그 숫자가 어느 구간에 속하는지 구분하는 조건문을 만들어보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Sub select_case()
    Dim N As Double
    N = 9
    
    Select Case N
        Case 0
            Debug.Print "N is zero."
        Case 1 To 3
            Debug.Print "N is between 1 and 3"
        Case 4567
            Debug.Print "N is between 4 and 7"
        Case Is > 8 And N <= 10
            Debug.Print "N is between 8 and 10"
        Case Else
            Debug.Print "N is not between 0 and 10"
    End Select
            
End Sub
cs



조건을 주는 방식을 다양하게 하였는데, 크게 어렵지 않으니 다양하게 익히면 좋을 것 같다.

그래봤자 쓰는 것만 쓰겠지ㅋㅋㅋ


지금까지 조건문 두 가지를 아주 기초적인 부분만 살펴보았다.

사실 더 할 것도 없다. 여기에 살을 더 붙이고 하는 건 코딩하는 자신의 몫이니까 ㅎ


다음에는 반복문을 학습해보겠다. 자꾸 무슨 문, 무슨 문 하는데 어쩔 수 없다 ㅠ

Comments