프로젝트 및 실습/VBA

[VBA] IIf Function

jooona 2022. 8. 4. 18:30
반응형

VBA가 제공하는 함수 중에 IIf 함수가 존재합니다. IIf는 생긴 것처럼 If 문과 비슷한 역할을 합니다.

If문과 IIf 문의 가장 큰 차이점은 Return Value를 개발자가 설정할 수 있다는 점입니다.

If문은 단지 조건이 참인지 거짓인지를 판별하기만 한다면, IIf문은 참일 경우 참에 해당하는 값을, 거짓일 경우 거짓에 해당하는 값을 반환합니다. 여기서 참 또는 거짓일 경우 반환할 값은 개발자가 지정할 수 있습니다.


IIf 문의 기본적인 문법은 다음과 같습니다.

 

IIf (expr, truepart, falsepart)

 

expr: 참과 거짓을 판별할 표현식
truepart: expr이 참일 경우 반환할 값 또는 표현식
falsepart: expr이 거짓일 경우 반환할 값 또는 표현식



예시를 살펴보겠습니다.

Sub IIf_Example()
    
    num = InputBox("Enter a Number: ")
    
    MsgBox IIf(num Mod 2 = 0, "Even Number", "Odd Number")

End Sub


사용자로부터 num이라는 정수를 입력받아 짝수인지 홀수인지를 판별하는 코드입니다.

IIf문 안에서 num을 2로 나눈 나머지가 0인지를 판별해, 참일 경우 "Even Number"를, 홀수일 경우 "Odd Number"를 반환하고, 이를 MsgBox를 이용해 바로 출력해줍니다.

위의 코드를 IIf 문 대신 If 문을 이용해 구현해보겠습니다. 두 코드는 정확히 같은 기능을 수행합니다.

Sub If_Example()
    
    num = InputBox("Enter a Number: ")
    
    If num Mod 2 = 0 Then
        MsgBox "Even Number"
    Else
        MsgBox "Odd Number"
    End If
    
End Sub

 


한 가지 유의해야 할 점은, truepart 또는 falsepart에 표현식을 사용할 경우, IIf문 내의 표현식에 대한 참, 거짓의 여부와 상관없이 truepart와 falsepart가 모두 계산된다는 점입니다. 다시 말해, 다음과 같은 경우는 에러가 발생하게 됩니다.

Sub IIf_Error_Example()
    
    
    num1 = InputBox("Enter a first Number: ")
    num2 = InputBox("Enter a second Number: ")
    
    MsgBox IIf(num2 = 0, 0, num1 / num2)

End Sub

num1과 num2를 사용자로부터 입력받아 num1을 num2로 나눠주는 코드입니다.

num2가 0이면 0을 반환하고, 0이 아니면 나눗셈을 수행하는 코드이기 때문에 돌아가지 않을까? 하고 생각할 수 있지만 실제로는 표현식의 참, 거짓 여부와 상관없이 뒤에 표현식들을 모두 계산하기 때문에 num2에 0을 입력하면 다음과 같이 에러가 발생합니다.

 

 

따라서 에러가 발생할 수 있는 표현식을 사용해야 하는 경우 그냥 마음편하게 If 문을 사용하시는 것이 좋습니다. 

반응형

'프로젝트 및 실습 > VBA' 카테고리의 다른 글

[VBA] Join Function  (0) 2022.08.08
[VBA] ParamArray  (0) 2022.08.05
[VBA] Error Handling  (0) 2022.08.03
[VBA] MsgBox 사용법  (0) 2022.08.03
[VBA] Optional Arguments  (0) 2022.08.02