'엑셀 vba 조건문'에 해당되는 글 2건

  1. 2015.11.11 [엑셀 VBA #7] SELECT CASE 조건문 활용하기 2
  2. 2015.11.09 [엑셀 VBA #6] IF~ELSE 조건문 활용하기 1


[엑셀 VBA #7] SELECT CASE 조건문 활용하기



이번 시간에는 조건이 많을 경우 사용되는 SELECT CASE 조건문에 대해 알아보겠습니다.

조건문을 처음 접하시는 분은 저번 포스팅(if~else 조건문)을 먼저 읽어 보시고 시작해주세요.


늘 그렇듯이 예제와 함께 시작하겠습니다.

숨겨진 시트에 과거 포스팅 내용들이 담겨있습니다.







이번 예제는 지난번 예제와 비슷합니다.

학생의 점수 구간 별로 등급을 매기는 엑셀 VBA입니다.


SELECT CASE 조건문의 구조는 아래와 같습니다.


Select case 변수


case n1


명령


case n2


명령2


...


End Select


즉, 변수의 값을 케이스별로 구분해서 명령을 내린다는 뜻입니다.


예제를 살펴보겠습니다.


Dim i As Byte

Dim p As Byte


For i = 3 To 17 Step 1

p = Sheet6.Cells(i,2).Value


Select Case p

Case Is >= 90

Sheet6.Cells(i, 3).Value = "A"

Case Is >= 70

Sheet6.Cells(i, 3).Value = "B"

Case Is >= 50

Sheet6.Cells(i, 3).Value = "C"

Case Is >= 30

Sheet6.Cells(i, 3).Value = "D"

Case Is < 30

Sheet6.Cells(i, 3).Value = "F"


End Select


Next i


조건이 단순한 값인 경우에는 'Case a' 처럼 쓸 수 있지만,


조건을 범위로 둘 경우, 'Case is ~~'라고 작성해야 합니다.


또 한가지 주의해야 할 점으로, Select Case 문 역시 여타 엑셀 VBA 문법처럼 위에서 아래로 내려가는 실행 구조를 갖고 있습니다.


따라서 If~Else문과 같이, 합집합의 범위가 가장 작은 조건부터 작성해야 합니다.


간단하게 오류가 나는 예를 들어보겠습니다.


Dim i As Byte

Dim p As Byte


For i = 3 To 17 Step 1

p = Sheet6.Cells(i, 2).Value


Select Case p

Case Is < 30

Sheet6.Cells(i, 3).Value = "F"

Case Is >= 30

Sheet6.Cells(i, 3).Value = "D"

Case Is >= 50

Sheet6.Cells(i, 3).Value = "C"

Case Is >= 70

Sheet6.Cells(i, 3).Value = "B"

Case Is >= 90

Sheet6.Cells(i, 3).Value = "A"


End Select


Next i


위 예제가 앞서 보여드린 예제와 다른 점은 조건의 순서가 바뀐 것입니다.


이 예제에는 30보다 크거나 같은 조건을 앞에다 위치시켰습니다.


이런 경우에는 30보다 큰 모든 값이 D로 표시되게 됩니다.


F8을 눌러서 순차적으로 실행해 보면 알 수 있겠지만, Select Case문 같은 경우, 조건에 맞는 Case를 찾게 되면 명령을 실행한 후 바로 End Select로 넘어가게 됩니다.


따라서 각 조건의 관계는 아래 그림과 같이 형성되야 합니다.

A에서 D까지의 순서로 조건을 지정해 주어야 오류를 방지할 수 있습니다.


A의 조건을 먼저 실행하고 나면 그 다음 B 조건의 실제 범위는 A를 포함하지 않는 B의 범위가 됩니다.


따라서 조건이 서로 겹치지 않게 됩니다.





엑셀 VBA에서 가장 중요하고 기초가 되는 문법이 조건문과 반복문입니다.


꼭! 이해하고 넘어가 주세요.


다음 포스팅부터는 아주 조금 난이도를 높혀서 진행하도록 하겠습니다.













Posted by Simon K
:


[엑셀 VBA #6] IF~ELSE 조건문 활용하기




엑셀 VBA의 조건문은 두 가지로 분류될 수 있습니다.

첫째는 IF~ELSE문, 둘째는 CASE 문 입니다.

이번 포스팅에서는 조건문 중 하나인 IF~ELSE문에 대해 알아보도록 하겠습니다.


이번에도 마찬가지로 예제와 함께 시작하겠습니다.

시트 숨김을 해제하시면 이전 예제들도 확인할 수 있습니다.






이번 예제는 조건에 맞는 셀에 색상을 입히는 엑셀 VBA입니다.


위 예제는 조건문과 반복문이 같이 응용된 구조입니다.


IF~ELSE 조건문은 일반적으로 아래와 같이 구성됩니다.


If 조건1 and 조건2 ... 조건n


명령


else


명령


end if


상황에 따라 여러가지 조건을 부여할 수 있습니다.

조건식은 논리연산식을 기초로 합니다.


엑셀 VBA의 IF~ELSE 조건문은 엑셀 자체의 함수와 비슷합니다.

다만 단순 연산이 아닌 명령을 실행하는 데에 엑셀 자체 기능은 한계가 있기 때문에 그런 경우에 엑셀 VBA로 사용합니다.


예제의 코드를 살펴보겠습니다.


Dim i As Byte


For i = 3 To 10 Step 1           '3번째 행부터 10번째 행까지 색을 입혀야 하기 때문에 행을 i 로 하는 반복문을 만듭니다.


If Sheet5.Cells(i, 2).Value <= 60 Then                '셀의 값이 60보다 작거나 같을 경우

Sheet5.Cells(i, 1).Interior.Color = RGB(100,100,100)                '왼쪽 셀의 색깔을 RGB(100,100,100)으로 바꿉니다.

Else                   '60보다 같거나 작은 경우, 60보다 큰 경우, 두 가지뿐이 없기 때문에 Else 이하 명령은 생략합니다.

End If


Next i








두 번째 예제는 엑셀 VBA의 IF~ELSE 문을 활용한 다중조건문입니다.

엑셀 자체의 IF 함수에 다중 조건문을 형성할 수 있는 것처럼, 엑셀 VBA의 IF~ELSE 조건문도 다중으로 구성할 수 있습니다.


Dim i As Byte


For i = 14 To 21 Step 1


    If Sheet5.Cells(i, 2).Value = 0 Then

    Sheet5.Cells(i, 1).Interior.Color = RGB(100, 10, 10)


    Else

    

        If Sheet5.Cells(i, 2).Value = 100 Then

        Sheet5.Cells(i, 1).Interior.Color = RGB(200, 200, 200)

        

        Else

            If Sheet5.Cells(i, 2).Value <= 60 Then

            Sheet5.Cells(i, 1).Interior.Color = RGB(100, 100, 100)

            Else

            End If

        End If

    

    End If

        

Next i


잘 보시면 위의 식과 순서가 바뀌어있습니다.

값이 60보다 작거나 같을 경우를 가장 아래에 놓은 이유는, 0 또한 60보다 작거나 같을 경우에 해당하기 때문입니다.

따라서 조건이 가장 작고 다른 조건과 교집합이 존재하지 않는 조건을 가장 앞에 둬야 합니다.




사실 엑셀 VBA의 IF~ELSE문은 조건이 여러개일 경우 적합하지 않습니다.

식도 길어지고 제한이 많이 있습니다.

따라서 조건이 여러개일 경우에는 CASE문을 사용하는 것이 알맞습니다.


다음 포스팅은 CASE 조건문을 사용한 다중 조건문에 대해 알아보겠습니다.








Posted by Simon K
: