VBA If, ElseIf, Else(If 문에 대한 최종 튜토리얼)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 3월 8, 2023

VBA If 문

vba else if statement

If Then

VBA If 문을 사용하면 표현식이 참인지 거짓인지 테스트하여 결과에 따라 다른 코드를 실행할 수 있습니다.

간단한 예를 살펴보겠습니다:

If Range("a2").Value > 0 Then Range("b2").Value = "Positive"

이는 A2의 값이 0보다 큰지 테스트합니다. 테스트 결과가 참이라면 B2를 “Positive”로 설정합니다.

vba if then

참고: 조건을 테스트할 때는 =, >, <, <>, <=, >= 비교 연산자를 사용합니다. 이 글의 뒷부분에서 더 자세히 설명하겠습니다.

다음은 간단한 한 줄 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

vba 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

vba elseif

여러 개의 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

vba else

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

vba if else

중첩된 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

nested ifs

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

if or

한 줄에 여러 개의 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

vba multiple ors

If And

And 연산자를 사용하면 모든 조건이 충족되는지 테스트할 수 있습니다.

If Range("a2").Value >= 5000 And Range("a2").Value <= 10000 Then
    Range("b2").Value = "In Range"
End If

vba if and

If Xor

Xor 연산자를 사용하면 정확히 하나의 조건이 충족되는지 테스트할 수 있습니다. 조건이 하나도 충족되지 않으면 Xor는 FALSE를 반환하고, 조건이 두 개 이상 충족되면 Xor도 거짓을 반환합니다.

VBA 프로그래밍에서 Xor를 사용하는 경우는 거의 본 적이 없습니다.

If Not

Not 연산자는 FALSE를 TRUE로 또는 TRUE를 FALSE로 변환하는 데 사용됩니다:

Sub IF_Not()
    MsgBox Not (True)
End Sub

vba if not

Not 연산자는 변환할 표현식을 괄호로 묶어야 한다는 점에 유의하세요.

Not 연산자는 If 문에도 적용할 수 있습니다:

If Not (Range("a2").Value >= 5000 And Range("a2").Value <= 10000) Then
    Range("b2").Value = "Out of Range"
End If

if not

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

vba if boolean 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

vba else if statement

If Else 예제

이제 좀 더 구체적인 예제를 살펴보겠습니다.

셀이 비어 있는지 확인하기

이 코드는 셀이 비어 있는지 확인합니다. 비어 있으면 셀을 무시합니다. 비어 있지 않으면 오른쪽 셀에 셀 값을 출력합니다:

Sub If_Cell_Empty()

If Range("a2").Value <> "" Then
    Range("b2").Value = Range("a2").Value
End If

End Sub

vba if cell empty do nothing

셀에 특정 텍스트 포함 여부 확인하기

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에 레코드가 있는지 확인할 수 있습니다.

vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기