EXCEL - VBA

VBA 조건문(1) - If

별동산 2022. 11. 4. 09:36
반응형

프로그램을 제어하는 구문은 조건문과 반복문이 있으며, 조건문은 If문과 Select Case문이 있고, 반복문은 For문과 While문이 있습니다.

먼저 If문에 대해 알아보겠습니다.

1. 구문

위 구문에서 [ ] (대괄호) 안에 있는 문장은 옵션이므로 생략 가능합니다. 따라서, 가장 간단한 조건문은
If 조건 Then
End If 가 됩니다.

아래와 같이 코드를 작성하려면 먼저 개발도구 - Visual Basic 명령을 누른 후 위 쪽 표준도구 모음에서 삽입 아이콘을 누른 후 모듈을 추가해야 합니다.


Microsoft 도움말 사이트 If 조건문의 구문 설명에 Then이 대괄호 사이에 있어서 생략 가능하다는데, 지우면 Then 또는 GoTo가 필요하다고 하면서 에러가 나므로 꼭 있어야 합니다.


그리고 실행문(Statements)도 생략 가능하다고 되어 있는데, 조건문에서 실행문이 없다면 의미가 없으므로 최소한 하나는 있어야 합니다.

위 엑셀 파일을 매크로 사용 통합 문서 형식으로 저장하면 아래와 같습니다.

if조건문.xlsm
0.01MB

 

2. 사용 예제

 

가. 예제 1

Sub 조건문1()
    If Range("a1") = 0 Then
        Range("a1") = 10
    End If
End Sub


위에서는 a1이었는데, a1을 변수로 인식해서 변수를 선언하라고 해서 Range("a1")로 수정했습니다.

위 구문은 A1셀의 값이 0이면 A1셀에 10을 입력하라는 것입니다.

F5키를 눌러 실행한 후 화면 위 표준 도구 모음에서 엑셀 아이콘을 눌러 엑셀로 돌아가면 비어 있던 A1셀에 10이 들어가 있습니다.

 

나. 예제 2

Sub 조건문1()
    If Range("a1") > 10 Then
        Range("b1") = "10보다 큽니다."
    Else
        Range("b1") = "10이하입니다."
    End If
End Sub


위 구문에는 Else문 다시 말해 조건이 일치하지 않는 경우를 정의하고 있습니다.

따라서, A1셀이 10보다 크다면 B1셀에 "10보다 큽니다"라고 입력하고,
아니면, 10보다 크지 않다면, 다시 말해 10 이하라면 B1셀에 "10이하입니다"라고 입력하라는 것입니다.

다. 예제 3

Sub 조건문1()
    If Range("a1") > 10 Then
        Range("b1") = "10보다 큽니다."
    ElseIf Range("a1") > 5 Then
        Range("b1") = "5보다 큽니다."
    Else
        Range("b1") = "10이하입니다."
    End If
End Sub

위 구문은 ElseIf문을 추가했는데, 의미는 첫 번째 조건문에 해당하지 않고 ElseIf 다음의 조건에 부합하는 경우라는 의미입니다.

위 구문을 실행해도 A1셀의 값이 10이므로 첫 번째 조건문을 충족하지 못하고 두 번째 ElseIf의 조건도 충족하지 못하므로 Else문에 따라 B1셀에 "10이하입니다"라고 입력됩니다.

따라서, Visual Basic 에디터에서 엑셀 아이콘을 눌러 엑셀로 돌아간 후 A1셀의 값을 7로 수정하고,
개발도구 탭을 누른 후 매크로 명령을 누르고, 조건문1 매크로를 더블 클릭하거나 실행 버튼을 누르면


ElseIf문의 조건을 충족하므로 B1셀에 "5보다 큽니다"라고 입력됩니다.

 

라. 예제 4

조건을 and와 or를 사용해서 and의 경우는 두 가지 이상 조건을 만족하는 경우, or는 하나라도 조건을 충족하는 경우를 정의할 수 있습니다.

먼저 A2셀에 11이라고 입력하고, Visual Basic 에디터로 들어가서


아래와 같이 코드를 작성합니다.

Sub 조건문1()
    If Range("a1") > 10 And Range("a2") > 0 Then
        Range("b1") = "둘 다 10보다 큽니다."
    ElseIf Range("a1") > 10 Or Range("a2") > 10 Then
        Range("b1") = "둘 중 하나는 10보다 큽니다."
    Else
        Range("b1") = "둘 다 10이하입니다."
    End If
End Sub


첫 번째 조건문은 and로 연결되어 있으므로 A1셀의 값이 10보다 크고 A2셀의 값이 10보다 큰 경우가 되며,
두 번째 조건문(ElseIf)은 or로 연결되어 있으므로 A1셀의 값이 10보다 크거나 A2셀의 값이 10보다 큰 경우로 둘 중에 하나라도 10보다 큰 경우가 되며,
세 번째 경우(Else)는 위 두 가지 조건을 모두 충족하지 않으므로 둘 다 10이하인 경우가 됩니다.

따라서, 위 서브 프로시저를 실행하면 B1셀에 "둘 중 하나는 10보다 큽니다."라고 입력됩니다.

 

3. 참고사항

가. 긴 문장 연결 표시 _(언더스코어 또는 언더바)
만약 조건문 또는 실행문이 길어진다면 _ 기호를 문장 끝에 입력한 후 다음 줄에 연속해서 작성할 수 있습니다.

Sub 조건문1()
    If Range("a1") > 10 And Range("a2") > 0 Then
        Range("b1") = "둘 다 10보다 큽니다."
    ElseIf Range("a1") > 10 _
        Or Range("a2") > 10 Then
        
        Range("b1") = "둘 중 하나는 10보다 큽니다."
    Else
        Range("b1") = "둘 다 10이하입니다."
    End If
End Sub

위 구문을 보면
ElseIf Range("a1") > 10 Or Range("a2") > 10 Then을

ElseIf Range("a1") > 10 _
Or Range("a2") > 10 Then이라고

중간에 _를 넣고 나머지는 Enter키를 눌러 다음 줄로 옮겼습니다.

나. 실행문을 Then과 같은 줄에 작성
조건이 하나인 경우는 다음 줄에 실행문과 End If를 적지 않고, 한 줄로 연속해서 작성할 수 있습니다. 따라서, 아래와 같이 간단하게 됩니다.

Sub 조건문1()
    If Range("a1") > 10 And Range("a2") > 0 Then Range("b1") = "둘 다 10보다 큽니다."
End Sub


그러나 조건이 여러 개인 경우는 안되니 두 줄로 사용하는 것이 좋겠습니다.

반응형