1. Do ~ While 문 개요
VBA에서 Do ~ While 문은 특정 조건이 참(True)인 동안 반복 실행되는 루프 문입니다.
Do While 문은 주어진 조건을 평가하고, 조건이 참이면 루프를 실행하며, 조건이 거짓(False)이면 루프를 종료합니다.
Do ~ While 문은 두 가지 방식으로 사용할 수 있습니다.
1. 조건을 먼저 검사하는 방식 (Entry-controlled loop)
- 루프의 시작 부분에서 조건을 평가하고, 조건이 참이면 루프를 실행합니다.
- 조건이 처음부터 거짓이면 루프가 한 번도 실행되지 않을 수 있습니다.
- 기본 구조
Do While 조건
' 반복 실행할 코드
Loop
2. 조건을 나중에 검사하는 방식 (Exit-controlled loop)
- 먼저 루프 내의 코드를 실행한 후, 조건을 평가합니다.
- 최소한 한 번은 루프가 실행됩니다.
- 기본 구조
Do
' 반복 실행할 코드
Loop While 조건
2. 예제 1: 1부터 10까지 출력하기 (Entry-controlled loop)
Sub DoWhileExample1()
Dim i As Integer
i = 1
Do While i <= 10
Debug.Print i ' 즉각 창(Immediate Window)에 출력
i = i + 1
Loop
End Sub
- i 가 1부터 시작해서 10 이하일 때까지 반복 실행됩니다.
- 루프가 시작될 때 조건을 검사하므로, 만약 i가 처음부터 10보다 크다면 루프는 실행되지 않습니다.
3. 예제 2: 사용자가 입력한 값이 0이면 종료 (Exit-controlled loop)
Sub DoWhileExample2()
Dim userInput As Integer
Do
userInput = InputBox("숫자를 입력하세요 (0을 입력하면 종료)")
Debug.Print "입력한 값: " & userInput
Loop While userInput <> 0
MsgBox "프로그램을 종료합니다."
End Sub
- 사용자가 숫자를 입력하면 즉각 창에 출력됩니다.
- 사용자가 0을 입력하면 루프가 종료됩니다.
- Do ~ Loop While 구조이므로 최소한 한 번은 실행됩니다.
4. 예제 3: 특정 조건을 만족할 때까지 반복 (While 대신 Until 사용)
Do Until 을 사용하면 특정 조건이 거짓일 때 반복 실행됩니다.
Sub DoUntilExample()
Dim num As Integer
num = 1
Do Until num > 10
Debug.Print num
num = num + 1
Loop
End Sub
- num이 10보다 커질 때까지 실행된다.
- Do While num <= 10과 같은 동작을 한다.
5. 예제 4: 시트에서 특정 값 찾기 (셀을 순회하며 값 찾기)
Sub FindValue()
Dim rng As Range
Dim ws As Worksheet
Dim target As String
Dim found As Boolean
Set ws = ThisWorkbook.Sheets("Sheet1") ' Sheet1에서 찾기
Set rng = ws.Range("A1")
target = "Hello"
found = False
Do While Not IsEmpty(rng.Value)
If rng.Value = target Then
MsgBox "값 '" & target & "' 을(를) " & rng.Address & "에서 찾았습니다!"
found = True
Exit Do
End If
Set rng = rng.Offset(1, 0) ' 다음 행으로 이동
Loop
If Not found Then
MsgBox "값을 찾을 수 없습니다."
End If
End Sub
- A1부터 시작하여 아래로 이동하면서 셀 값을 검사합니다.
- 특정 값 "Hello"를 찾으면 메시지 박스를 띄우고 루프를 종료합니다.
- 값이 없을 경우 "값을 찾을 수 없습니다." 메시지를 출력합니다.
6. 예제 5: 행 데이터를 모두 합산하기
Sub SumColumn()
Dim total As Double
Dim ws As Worksheet
Dim cell As Range
Set ws = ThisWorkbook.Sheets("Sheet1")
Set cell = ws.Range("A1") ' A1부터 시작
total = 0
Do While Not IsEmpty(cell.Value)
total = total + cell.Value
Set cell = cell.Offset(1, 0) ' 다음 행으로 이동
Loop
MsgBox "합계: " & total
End Sub
- A1 부터 시작하여 아래로 이동하면서 데이터를 더합니다.
- 빈 셀을 만나면 루프가 종료됩니다.
- 최종 합계를 메시지 박스로 표시합니다.
7. Do ~ While vs Do ~ Until 차이
| 구분 | Do While 조건 | Do Until 조건 |
| 실행 조건 | 조건이 참(True)이면 실행 | 조건이 거짓(False)이면 실행 |
| 종료 조건 | 조건이 거짓(False)이 되면 종료 | 조건이 참(True)이 되면 종료 |
| 최소 실행 횟수 | 0번 이상 | 0번 이상 |
Do ~ While 문은 특정 조건이 만족될 때까지 반복해야 할 때 유용합니다.
특히 사용자 입력을 받을 때, 특정 데이터를 찾을 때, 셀을 반복하며 처리할 때 자주 사용되며, Do Until과 비교하면서 적절한 루프를 선택하는 것이 중요합니다.
VBA 루프를 효율적으로 사용하면 업무 자동화와 데이터 처리 속도를 크게 향상시킬 수 있습니다. 필요한 경우 Exit Do 문을 사용하여 강제로 루프를 빠져나올 수도 있습니다.
'VBA' 카테고리의 다른 글
| VBA 셀(Cells)과 Range 속성과 활용 (0) | 2025.03.29 |
|---|---|
| VBA 에러 처리하기 (0) | 2025.03.12 |
| VBA For Each.... Next 문 (0) | 2025.03.05 |
| VBA For ~ Next 문으로 반복 실행하기 (0) | 2025.02.28 |
| VBA Selet Case 문 사용법 및 예제 (0) | 2025.02.15 |