VBA

VBA Do ~ While 문으로 반복

꼰대 부장 2025. 3. 7. 21:31

 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