Skip Navigation Links.
Expand VBAVBA
엑셀프로그래밍이 필요한 이유
Expand ExcelExcel
Expand External LibraryExternal Library
Expand SolutionSolution
Expand EssayEssay

Conditional Structure|If~Then~Else|IIF|If|Else|ElseIf|End If|Then|WorksheetFunction If|
|Conditional Block Statement|And|Or|Not|

If 조건문은 엑셀의 워크시트함수중 IF함수를 아시는 분들은
더 이상 설명할 필요도 없는 부분이다
엑셀의 시트를 그려놓고 비교하면서 설명하도록 하자



B2셀의 수식은 아래와 같을것이다

=IF(A2>90,"A",IF(A2>80,"B",IF(A2>70,"C",IF(A2>60,"D",IF(A2>50,"E","F")))))



아마도 엑셀을 잘하시는 분들은
조건문은 이미 다 알고 있는 부분이다
엑셀워크시트의 논리값을 얻어 내는
AND함수,NOT함수,OR함수등의
값을 받아서 처리하거나 논리식의 결과값을 받아서
IF함수가 새로운 결과를 만들어 나가는 것
그런 내용을 VB프로그래밍에서도 수행하는 것이다

If ~Decision Block

If 조건판정문도 하나의 Block Statement이다
If~
    ...
End If
와 같이 시작과 끝이 있는 하나의 Block을 형성하기 때문이다
이런 Block문을 작성할때는 Block의 시작과 끝명령을 먼저 입력후
내용을 작성하는것이 헷갈리지 않고 편리한다
대개의 초보님들은 한참 작성하다가 복잡한 구문에서는 Block을
잃어먹고 닫지 않는 수가 많다(그렇다고 해서 큰일날 일은 없지만)
If~End If와 같이 시작과 끝을 먼저 작성하는 습관이 좋은것이다

위의 수식(Formula)를 VBA의 If Block문으로 바꿔보자

Sub evaluatePoint()
Dim iPoint As Integer
Dim rngGrade As Range
iPoint = Int(Rnd() * 100) + 1
Range("A2") = iPoint
Set rngGrade = Range("B2")
If iPoint > 90 Then
    rngGrade = "A"
ElseIf iPoint > 80 Then
    rngGrade = "B"
ElseIf iPoint > 70 Then
    rngGrade = "C"
ElseIf iPoint > 60 Then
    rngGrade = "D"
ElseIf iPoint > 50 Then
    rngGrade = "E"
Else
    rngGrade = "F"
End If
End Sub


만약 90점이상만 A를 준다고 하면

If iPoint>90 Then
   rngGrade="A"
End If

가 될것이고 아래와 같이 작성해도 된다

If iPoint>90 Then rngGrade="A"

와 같이 End If가 없이 한줄로 작성해도 되는것이다
또한 90점이상은 A를 주고 나머지는 모두 탈락이라고하고 싶다면

If iPoint>90 Then
    rngGrade="A"
Else
    rngGrade="탈락"
End If

ElseIf는 조건을 더 분석할때 추가 시켜나가면 되는것이다

간단한 경우에는 IIF함수를 활용하면 좋다

엑셀의 IF워크시트함수와 비슷한 VBA함수가 있다
IIf함수(Immediate If)를 활용하면 위의 구문을 아래와 같이
작성할수 있겠다

Sub evaluatePoint_2()
Dim iPoint As Integer
Dim rngGrade As Range
iPoint = Int(Rnd() * 100) + 1
Range("A2") = iPoint
Range("B2") = IIf(iPoint > 90, "A", _
IIf(iPoint > 80, "B", IIf(iPoint > 70, "C", _
IIf(iPoint > 60, "D", IIf(iPoint > 50, "E", "F"))))) End Sub

간단한 경우가 아니면 위와 같이 하는것은 별로 좋지 않다
명령문은 할줄씩 한꺼번에 실행되기 때문에 에러가 났을때
여러조건이 한줄에 몰려있으면 각각의 어떤 논리식에서 에러가
났는지 찾는데 애를 먹는다
도구는 잘 알고 사용하지 못하면 애물단지가 되니까..

IF Decision Block

아래와 같이 한줄에 때려 넣는 논리식도 잘 생각하고..

If A=3 And B=4 And C=5 Then
  조건에 맞는 작업명령...
End If

위와 같이 하는것 보다는

If A=3 Then
  If B=4 Then
    If C=5 Then
    조건에 맞는 작업명령...
    End If
  End If
End If

가 좀 귀찮지만 좋은 방법이다
위의 IIF함수와 마찬가지로
컴퓨터는 한줄씩 명령문을 실행하니까...위의 것의 경우도
세개의 논리식분석중 어느 한곳에 에러가 나도 어디에서 났는지 찾기가 깝깝해 진다
그러나 두번째는 한줄..한줄 내려가니까..
어느줄에서 에러가 났는지 알기 쉽거니와
엄밀하게 보자면 속도가 빠르다
첫번째 조건 즉 A=3을 만족시키지 못하면
더이상 계산을 진행할 필요가
없으니까..쓸데없이 첫번째의 것과 같이 필요없는
두번째(B=4)논리식
세번째(C=5)논리식
의 계산을 할 필요가 없는것이다
물론 논리식부분의 변수의 유효함에 자신이 있는 간단한것이라면
위의 방법도 나쁜것은 아니지만..아무튼 이러한 부분이 경험에 의하여
적절히 선택하여 활용할 일이다