세진세상

VBA 반복문 #2(Do While, Do Until) 본문

VBA

VBA 반복문 #2(Do While, Do Until)

세진세상 2018. 2. 5. 17:34

VBA 반복문#2


반복 횟수를 지정하여 일정 코드를 반복 수행하는 반복문이 아니라,

특정 조건이 참, 거짓 여부에 따라 일정 코드 반복 수행하는 반복문을 알아보겠다.

조건은 일반적으로 연산자가 들어간 형태를 갖는데, 해당 조건이 참인지 거짓인지를 판단하여 반복을 수행한다.

연산자 http://sejinworld.tistory.com/13



조건문을 이용한 반복문은 Do ~ Loop문이다.

Do ~ Loop문은 크게 2가지, 구조에 따라 4가지로 구분한다.

Do While Loop

Do Until Loop

Do Loop While

Do Loop Until

이 정도만 알면 충분해 보인다. 하나씩 알아보면서, 실습도 함께 하겠다.



Do While Loop

Do While 조건문

반복코드

Loop

의 구조를 갖는다.

이는 조건문이 참인 동안, 거짓이 될 때까지 반복코드를 수행한다.


네 가지 반복문 모두 1~10까지의 합을 구하는 코드로 실습하겠다.

1
2
3
4
5
6
7
8
9
10
11
Sub DoWhileLoop()
    Dim i As Integer
    Dim sum As Integer
    
    Do While i <= 10
        sum = sum + i
        i = i + 1
    Loop
 
    Debug.Print sum; i
End Sub
cs


i가 10보다 작거나 같은 동안, 반복 코드를 수행한다.

i는 초기값(지정은 안했지만)인 0으로 시작하여 10번 코드를 수행한 후,

11이 되면 더 이상 반복하지 않는고, Do문을 빠져나온다.

출력된 결과는 sum = 55, i = 11이 되겠다.



Do Until Loop

Do Until 조건문

반복코드

Loop

조건문이 거짓인 동안, 참이 될 때까지 반복코드를 수행한다.

1
2
3
4
5
6
7
8
9
10
11
Sub DoUnitlLoop()
    Dim i As Integer
    Dim sum As Integer
    
    Do Until i > 10
        sum = sum + i
        i = i + 1
    Loop
 
    Debug.Print sum; i
End Sub
cs


i가 10보다 클 때까지 반복코드를 수행한다.

i는 초기값인 0으로 시작하여 10번 코드를 수행한 후,

11이 되면 10보다 커지므로, 조건이 참이 되며 Do문을 빠져나온다.

물론, 결과는 동일하다.



Do Loop While
Do

반복코드

Loop While 조건문

반복코드를 먼저 한번 수행하고, 조건문이 참은 동안(거짓이 될 때까지) 코드를 반복 수행한다.

차이는 반복코드를 일단 한번은 수행한다는 점이다.


1
2
3
4
5
6
7
8
9
10
11
Sub DoLoopWhile()
    Dim i As Integer
    Dim sum As Integer
    
    Do
        sum = sum + i
        i = i + 1
    Loop While i <= 10
 
    Debug.Print sum; i
End Sub
cs


마찬가지로 동일한 결과를 얻는데, 단순히 조건문의 위치만 다른 것이 아니다.

왜냐하면 일단 한번을 수행한다는 점에서 분명한 차이가 있기 때문이다.



그렇다면 조건문의 위치에 따라 어떻게 다른지 예제로 비교해보겠다.


아래 예제는 조건문의 위치만 다르게 한, 두 개의 DoWhile문이다.

자세히 보면 처음부터 조건이 참일 수 없으므로, 반복문을 바로 빠져나올 것이다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub DoWhile_ex()
    Dim i As Integer
    Dim j As Integer
    Dim sum_i As Integer
    Dim sum_j As Integer
    
    Do While i > 10
        sum_i = sum_i + i
        i = i + 1
    Loop
 
    Do
        sum_j = sum_j + j
        j = j + 1
    Loop While j > 10
    
    Debug.Print "sum_i : "; sum_i; ", ""i : "; i
    Debug.Print "sum_j : "; sum_j; ", ""j : "; j
End Sub
cs


하지만 결과는 차이가 있다. 조건문이 뒤에 배치된 DoWhile문의 경우는 한번을 수행했으므로, j의 값이 1이 된 것이다.



Do Loop Until

Do

반복코드

Loop Until 조건문

반복코드를 먼저 한번 수행한 후, 조건문이 거짓인 동안(참이 될 때까지) 코드를 반복 수행한다.

마찬가지로 차이는 일단 한번은 수행한다는 점이다.


1
2
3
4
5
6
7
8
9
10
11
Sub DoLoppUntil()
    Dim i As Integer
    Dim sum As Integer
    
    Do
        sum = sum + i
        i = i + 1
    Loop Until i > 10
 
    Debug.Print sum; i
End Sub
cs



앞서 DoWhile문에서 조건문의 위치에 따른 차이를 확인했으니, DoUntil문은 생략하겠다.



조건문을 활용한 반복문을 알아봤다. while, until의 영어 뜻만 대충이라도 알면, 직관적으로 알 수 있는 반복문이다.

조건문의 위치는 큰 의미없어 보여도, 수행 카운트를 어떻게 쌓느냐에 관점에서는 충분히 익힐만 하다.


이제 날코딩할 정도의 지식은 갖춘 것 같다. 앞으로는 유용한 VBA 내부의 함수를 알아보겠다.  

Comments