들어가며
Excel VBA에서 반복문을 만드는 또 한 가지 방법은 Do ~ Loop 문을 사용하는 겁니다. For ~ Next는 반복할 횟수가 정해진 경우에, Do ~ Loop는 몇 번 반복할지 모를 때 흔히 사용합니다. 절대적인 기준은 아니며, 같은 상황을 For ~ Next로도, Do ~ Loop로도 표현할 수 있습니다.
조금만 하다 보면 어떤 것이 적합한지 분별하는 눈이 생깁니다. 준비되셨나요? 출발합니다.
Do ~ Loop 문
Do와 Loop 사이의 명령을 반복 실행합니다. 중간에 탈출(Exit)할 조건을 만들어 두지 않으면 무한 Loop 순환에 빠지게 되므로 대비책을 만들어 두어야겠죠. 1부터 100까지 숫자를 합산하는 반복문을 Do ~ Loop로 처리해 보겠습니다.
Sub do_loop_1()
Dim iSum As Integer
Dim i As Integer
Do
i = i + 1
If i > 100 Then ''' 이 부분이 없으면 무한 루프에 빠짐
Exit Do
Else
iSum = iSum + i
End If
Loop
MsgBox "결과: " & iSum
End Sub
Exit Do가 없으면 시스템이 다운될 때까지 반복문이 실행됩니다. 이번에는 같은 작업을 For ~ Next 문으로 나타내 볼까요?
Sub for_next()
Dim iSum As Integer
Dim i As Integer
For i = 1 To 100
iSum = iSum + i
Next
MsgBox "합계: " & iSum
End Sub
이 경우에는 For ~ Next 문이 더 간결하게 표현되는군요. 하지만 Do ~ Loop는 그 나름의 쓰임새가 있습니다. Do ~ Loop는 몇 가지 종류가 있습니다.
Do While | Do While ~ Loop |
Do ~ Loop While | |
Do Until | Do Until ~ Loop |
Do ~ Until Loop |
Exit Do 역할을 하는 While과 Until이 Do 쪽에 붙느냐 Loop 쪽에 붙느냐에 따라 4종류로 나뉩니다. 각각의 차이에 대해 알아보겠습니다.
Do While Loop 문
아, 짜증이 물밀듯 밀려올라고 합니다.
"순환문을 돌리기 위한 구문이면 화끈하게 하나만 있으면 되지, For ~ Next, For Each ~ In ~ Next, Do ~ Loop도 모자라서 Do While Loop라고요?"
당연한 말이지만, 누구를 골탕 먹이려고 복잡하게 해 놓은 것이 아니라 상황에 따라 그만큼 융통성 있게 처리하기 위해 그렇게 한 겁니다. 실무에서 다양한 상황에 직면하다 보면 저절로 터득하게 될 테니 너무 고민하지 않아도 됩니다.
Do While Loop 문은 '~인 동안에는 반복문을 실행'하라는 뜻으로, 사용 형태는 다음과 같이 2가지로 구분할 수 있습니다.
Do [While 조건]
명령문
명령문
[Exit Do]
명령문
명령문
Loop
----------
Do
명령문
명령문
[Exit Do]
명령문
명령문
Loop [While 조건]
[While 조건]이 어느 쪽에 붙느냐에 따라 결과가 조금 다릅니다. 그 차이는 다음 예제를 보면 명확해집니다.
Sub do_while_loop_1()
Do While Not IsEmpty(ActiveCell) ''' 현재 셀이 공백이 아닌 경우 Do 문 실행
ActiveCell.Value = "VBA" ''' 현재 셀에 'VBA' 입력
ActiveCell.Offset(1, 0).Select ''' 셀 포인터를 1행 아래로 이동
Loop
End Sub
현재 셀 포인터가 위치한 셀을 기존으로 아래로 한 행씩 내려가면서 'VBA'라는 문자열을 삽입하는 코드입니다. 경우에 따라 이 코드는 한 번도 실행되지 않을 수 있습니다. 왜냐고요? 현재 셀에 아무 값도 들어있지 않다면 Do While 안으로 들어가지 않기 때문입니다.
그렇다면 아래의 경우는 어떨까요?
Sub do_while_loop_2()
Do
ActiveCell.Value = "VBA"
ActiveCell.Offset(1, 0).Select
Loop While Not IsEmpty(ActiveCell)
End Sub
이번에는 조건절이 Loop 쪽에 있습니다. 이런 경우에는 Do 안에 있는 명령문을 적어도 한 번은 실행합니다.
Do Until Loop 문
Do While Loop가 '~인 동안에는 반복문을 실행'하는 것이라면, Do Until Loop는 '~가 될 때까지 반복문을 실행'합니다. 다시 말해서 Do While은 조건식이 참(True)인 동안에는 반복문을 실행하는 데 비해, Do Until은 조건식이 True가 될 때까지 반복한다는 점에서 차이가 있습니다.
Do [Until 조건]
명령문
명령문
[Exit Do]
명령문
명령문
Loop
----------
Do
명령문
명령문
[Exit Do]
명령문
명령문
Loop [Until 조건]
While이 Until로 바뀐 것 말고는 같은 형태죠? 사용 예제 역시 마찬가지입니다. 다음 두 프로시저는 동일한 기능을 수행합니다. Until을 While로 바꿨을 때 While 뒤에 Not이 붙은 점에 유의하세요.
Sub do_until_1()
Do Until IsEmpty(ActiveCell)
ActiveCell.Value = "VBA"
ActiveCell.Offset(1).Select
Loop
End Sub
----------
Sub do_while_1()
Do While Not IsEmpty(ActiveCell)
ActiveCell.Value = "VBA"
ActiveCell.Offset(1).Select
Loop
End Sub
다음 두 프로시저도 마찬가지입니다.
Sub do_until_2()
Do
ActiveCell.Value = "VBA"
ActiveCell.Offset(1).Select
Loop Until IsEmpty(ActiveCell)
End Sub
----------
Sub do_while_2()
Do
ActiveCell.Value = "VBA"
ActiveCell.Offset(1).Select
Loop While Not IsEmpty(ActiveCell)
End Sub
'조건절이 어느 쪽에 붙어 있느냐에 따라 Do ~ Loop 문 내부가 아예 실행되지 않을 수도 있다' 정도만 이해하면 됩니다.
나가며
Excel VBA에서 사용되는 대표적인 반복문 구문을 모두 배우셨습니다. 축하합니다. 모든 것을 한 번에 알려고 스트레스받지 마세요. 익숙한 것을 한 두 가지 이해한 다음, 실무에 하나씩 적용하다 보면 차이를 자연스레 깨닫는 순간이 옵니다. 정말입니다. Trust me!
'VBA' 카테고리의 다른 글
[VBA 입문] 15강. 사용자 정의 함수 만들기 (0) | 2023.10.09 |
---|---|
[VBA 입문] 14강. 실행 순서 제어(4) ㅡ GoTo 문 (2) | 2023.10.07 |
[VBA 입문] 12강. 실행 순서 제어(2) ㅡ For ~ Next 문 (0) | 2023.10.05 |
[VBA 입문] 11강. 실행 순서 제어(1) ㅡ 조건 분기 (0) | 2023.10.04 |
[VBA 입문] 10강. 연산자, 변수와 상수 (112) | 2023.10.03 |