VBA If, ElseIf, Else(If 문에 대한 최종 튜토리얼)
In this Article
VBA If 문
If Then
VBA If 문을 사용하면 표현식이 참인지 거짓인지 테스트하여 결과에 따라 다른 코드를 실행할 수 있습니다.
간단한 예를 살펴보겠습니다:
If Range("a2").Value > 0 Then Range("b2").Value = "Positive"
이는 A2의 값이 0보다 큰지 테스트합니다. 테스트 결과가 참이라면 B2를 “Positive”로 설정합니다.
참고: 조건을 테스트할 때는 =, >, <, <>, <=, >= 비교 연산자를 사용합니다. 이 글의 뒷부분에서 더 자세히 설명하겠습니다.
다음은 간단한 한 줄 If 문에 대한 구문입니다:
If [참/거짓_테스트] then [실행코드]
읽기 쉽게 하기 위해 줄 바꿈 문자(밑줄)를 사용하여 위 그림에서와 같이 If 문을 두 줄로 확장할 수 있습니다:
If [참/거짓_테스트] then _
[실행코드]
If Range("a2").Value > 0 Then _
Range("b2").Value = "Positive"
End If
위의 “한 줄” if 문은 하나의 조건을 테스트할 때 잘 작동합니다. 그러나 여러 조건으로 인해 IF 문이 복잡해지면 if 문 끝에 “End If”를 추가해야 합니다:
If Range("a2").Value > 0 Then
Range("b2").Value = "Positive"
End If
구문은 다음과 같습니다:
If [참/거짓_테스트] then
[실행코드]
End If
End If는 if 문이 끝났음을 나타냅니다.
이제 ElseIF를 추가해 보겠습니다:
ElseIF – 다중 조건
ElseIf는 기존 If 문에 추가됩니다. ElseIf는 이전 조건이 충족되지 않은 경우에만 조건이 충족되는지 테스트합니다.
이전 예제에서는 셀 값이 양수인지 테스트했습니다. 이제 ElseIf를 사용하여 셀 값이 음수인지도 테스트해 보겠습니다:
If Range("a2").Value > 0 Then
Range("b2").Value = "Positive"
ElseIf Range("a2").Value < 0 Then
Range("b2").Value = "Negative"
End If
여러 개의 ElseIf를 사용하여 여러 조건들을 테스트할 수 있습니다:
Sub If_Multiple_Conditions()
If Range("a2").Value = "Cat" Then
Range("b2").Value = "Meow"
ElseIf Range("a2").Value = "Dog" Then
Range("b2").Value = "Woof"
ElseIf Range("a2").Value = "Duck" Then
Range("b2").Value = "Quack"
End If
End Sub
이제 Else를 추가하겠습니다:
Else
Else는 다른 이전 조건이 충족되지 않은 경우 실행됩니다.
셀 값이 양수나 음수가 아닌 경우 0이어야 함을 나타내기 위해 Else를 사용하여 예제를 마무리하겠습니다:
If Range("a2").Value > 0 Then
Range("b2").Value = "Positive"
ElseIf Range("a2").Value < 0 Then
Range("b2").Value = "Negative"
Else
Range("b2").Value = "Zero"
End If
If-Else
가장 일반적인 유형의 If 문은 간단한 If-Else입니다:
Sub If_Else()
If Range("a2").Value > 0 Then
Range("b2").Value = "Positive"
Else
Range("b2").Value = "Not Positive"
End If
End Sub
중첩된 IF
if 문을 서로 안에 ‘중첩’할 수도 있습니다.
Sub Nested_Ifs()
If Range("a2").Value > 0 Then
Range("b2").Value = "Positive"
Else
If Range("a2").Value < 0 Then
Range("b2").Value = "Negative"
Else
Range("b2").Value = "Zero"
End If
End If
End Sub
IF – Or, And, Xor, Not
다음으로 논리 연산자에 대해 알아보겠습니다: Or, And, Xor, Not.
If Or
Or 연산자는 조건이 하나 이상 충족되는지 테스트합니다.
다음 코드는 A2 범위의 값이 5,000보다 작거나 10,000보다 큰지 테스트합니다:
If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Then
Range("b2").Value = "Out of Range"
End If
한 줄에 여러 개의 Or들을 포함할 수 있습니다:
If Range("a2").Value < 5000 Or Range("a2").Value > 10000 Or Range("a2").Value = 9999 Then
Range("b2").Value = "Out of Range"
End If
여러 개의 Or를 사용하려는 경우 코드를 더 쉽게 읽을 수 있도록 줄 바꿈 문자를 사용하는 것이 좋습니다:
If Range("a2").Value < 5000 Or _
Range("a2").Value > 10000 Or _
Range("a2").Value = 9999 Then
Range("b2").Value = "Out of Range"
End If
If And
And 연산자를 사용하면 모든 조건이 충족되는지 테스트할 수 있습니다.
If Range("a2").Value >= 5000 And Range("a2").Value <= 10000 Then
Range("b2").Value = "In Range"
End If
If Xor
Xor 연산자를 사용하면 정확히 하나의 조건이 충족되는지 테스트할 수 있습니다. 조건이 하나도 충족되지 않으면 Xor는 FALSE를 반환하고, 조건이 두 개 이상 충족되면 Xor도 거짓을 반환합니다.
VBA 프로그래밍에서 Xor를 사용하는 경우는 거의 본 적이 없습니다.
If Not
Not 연산자는 FALSE를 TRUE로 또는 TRUE를 FALSE로 변환하는 데 사용됩니다:
Sub IF_Not()
MsgBox Not (True)
End Sub
Not 연산자는 변환할 표현식을 괄호로 묶어야 한다는 점에 유의하세요.
Not 연산자는 If 문에도 적용할 수 있습니다:
If Not (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) Then
Range("b2").Value = "Out of Range"
End If
If를 사용한 비교
일반적으로 는 비교를 할 때 비교 연산자 중 하나를 사용합니다:
Comparison Operator | Explanation |
---|---|
= | 같음 |
<> | 같지 않음 |
> | 왼쪽이 큼 |
>= | 왼쪽이 크거나 같음 |
< | 왼쪽이 작음 |
<= | 왼쪽이 작거나 같음 |
그러나 참 또는 거짓을 반환하는 모든 표현식이나 함수를 사용할 수도 있습니다.
If – 불리언(boolean) 함수
If 문에 대한 표현식을 작성할 때 참 또는 거짓을 생성하는 함수를 사용할 수도 있습니다. VBA에는 이러한 함수가 몇 가지 있습니다:
Function | Description |
---|---|
IsDate | 표현식이 유효한 날짜이면 TRUE를 반환합니다. |
IsEmpty | 빈 셀 또는 정의되지 않은 변수를 확인합니다. |
IsError | 오류 값이 있는지 확인합니다. |
IsNull | NULL 값이 있는지 확인합니다. |
IsNumeric | 숫자 값인지 확인합니다. |
다음과 같이 호출할 수 있습니다:
If IsEmpty(Range("A1").Value) Then MsgBox "Cell Empty"
Excel에는 WorksheetFunction을 사용하여 호출할 수 있는 추가 함수도 많이 있습니다. 다음은 Excel IsText 함수의 예입니다:
If Application.WorksheetFunction.IsText(Range("a2").Value) Then _
MsgBox "Cell is Text"
사용자 정의 함수(UDF)를 직접 만들 수도 있습니다. 아래에서는 TRUE를 반환하는 간단한 불리언 함수를 만들겠습니다. 그런 다음 If 문에서 해당 함수를 호출합니다:
Sub If_Function()
If TrueFunction Then
MsgBox "True"
End If
End Sub
Function TrueFunction() As Boolean
TrueFunction = True
End Function
텍스트 비교하기
숫자 비교와 유사하게 텍스트를 비교할 수도 있습니다:
Msgbox "a" = "b"
Msgbox "a" = "a"
텍스트를 비교할 때는 “대/소문자”(대/소문자)를 염두에 두어야 합니다. 기본적으로 VBA는 대소문자가 다른 문자는 일치하지 않는 것으로 간주합니다. 즉, “A” <> “a”입니다.
VBA가 대소문자를 무시하도록 하려면 모듈 상단에 Option Compare Text 선언을 추가해야 합니다:
Option Compare Text
선언을 한 후 “A” = “a”:
Option Compare Text
Sub If_Text()
MsgBox "a" = "A"
End Sub
VBA If Like
VBA Like연산자를 사용하면 완전하지않은 텍스트를 비교할 수 있습니다. 자세한 내용을 알아보려면 “Like 연산자” 링크를 클릭하세요. 여기서는 기본적인 예제를 보여드리겠습니다:
Dim strName as String
strName = "Mr. Charles"
If strName Like "Mr*" Then
MsgBox "True"
Else
MsgBox "False"
End If
여기서는 별표 “*” 와일드카드를 사용하고 있습니다. “*”는 임의의 문자를 의미합니다. 따라서 위의 If 문은 TRUE를 반환합니다. Like 연산자는 매우 강력하지만 텍스트를 처리하는 데 자주 사용되지 않는 도구입니다.
If Loops
VBA Loops 를 사용하면 작업을 반복할 수 있습니다. IF-ELSE와 루프를 결합하면 많은 계산을 빠르게 처리할 수 있는 좋은 방법입니다.
Continuing with our Positive / Negative 예제에 계속 이어서, 셀 범위를 반복하는 For Each Loop 를 추가하겠습니다.
Sub If_Loop()
Dim Cell as Range
For Each Cell In Range("A2:A6")
If Cell.Value > 0 Then
Cell.Offset(0, 1).Value = "Positive"
ElseIf Cell.Value < 0 Then
Cell.Offset(0, 1).Value = "Negative"
Else
Cell.Offset(0, 1).Value = "Zero"
End If
Next Cell
End Sub
If Else 예제
이제 좀 더 구체적인 예제를 살펴보겠습니다.
셀이 비어 있는지 확인하기
이 코드는 셀이 비어 있는지 확인합니다. 비어 있으면 셀을 무시합니다. 비어 있지 않으면 오른쪽 셀에 셀 값을 출력합니다:
Sub If_Cell_Empty()
If Range("a2").Value <> "" Then
Range("b2").Value = Range("a2").Value
End If
End Sub
셀에 특정 텍스트 포함 여부 확인하기
Instr 함수는 텍스트 문자열이 다른 문자열에서 발견되는지 테스트합니다. 셀에 특정 텍스트가 포함되어 있는지 확인하려면 If 문과 함께 사용하십시오:
If Instr(Range("A2").value,"text") > 0 Then
Msgbox "Text Found"
End If
셀에 텍스트 포함 여부 확인
이 코드는 셀에 텍스트가 있는지 테스트합니다:
Sub If_Cell_Is_Text()
If Application.WorksheetFunction.IsText(Range("a2").Value) Then
MsgBox "Cell is Text"
End If
End Sub
If Goto
If 문의 결과를 사용하여 코드의 다른 섹션으로 “이동”할 수 있습니다.
Sub IfGoTo ()
If IsError(Cell.value) Then
Goto Skip
End If
'다른 코드가 들어갈 자리
Skip:
End Sub
셀이 비어 있으면 행 삭제하기
If와 루프를 사용하면 셀이 비어 있는지 테스트하고 비어 있으면 전체 행을 삭제할 수 있습니다.
Sub DeleteRowIfCellBlank()
Dim Cell As Range
For Each Cell In Range("A2:A10")
If Cell.Value = "" Then Cell.EntireRow.Delete
Next Cell
End Sub
Yes/No MessageBox를 활용한 If문
VBA Message Boxes를 사용하면 사용자에게 여러 옵션 중에서 선택하도록 요청할 수 있습니다. 예/아니요 메시지 상자는 사용자에게 예 또는 아니요를 선택하도록 요청합니다. 프로시저에 예/아니요 메시지 상자를 추가하여 프로시저를 계속 실행할 것인지 여부를 사용자에게 물어볼 수 있습니다. If 문을 사용하여 사용자의 입력을 처리합니다.
다음은 Yes/No 메시지 상자의 실제 예입니다:
Sub MsgBoxVariable()
Dim answer As Integer
answer = MsgBox("Do you want to Continue?", vbQuestion + vbYesNo)
If answer = vbYes Then
MsgBox "Yes"
Else
MsgBox "No"
End If
End Sub
Access VBA의 If, ElseIf, Else
If, ElseIf 및 Else 함수는 Excel VBA에서와 마찬가지로 Access VBA에서도 똑같이 작동합니다.
If 문을 사용하여 Recordset에 레코드가 있는지 확인할 수 있습니다.