TOP

VBA-수업 8.1. 루프(Loops)

루프는 명령을 여러 번 반복하므로 많은 시간을 절약할 수 있습니다.

Excel VBA에는 다음 유형의 루프가 있습니다.

  • While ... Wend
  • Do ... Loop
  • For ... To ... Next

  • 다음 코드는 A열의 각 셀에 일련의 숫자를 삽입합니다(1부터 12까지).

    Sub while_loop()
    
        Cells(1, 1) = 1
        Cells(2, 1) = 2
        Cells(3, 1) = 3
        Cells(4, 1) = 4
        Cells(5, 1) = 5
        Cells(6, 1) = 6
        Cells(7, 1) = 7
        Cells(8, 1) = 8
        Cells(9, 1) = 9
        Cells(10, 1) = 10
        Cells(11, 1) = 11
        Cells(12, 1) = 12
    
    End Sub
    

    이 코드는 매우 반복적입니다 ...

    단지 12개가 아닌 수백 개의 셀에 연속적인 숫자를 삽입해야 한다고 상상해 보십시오. 이제 루프가 왜 매우 유용한지 이해하게 되실 것입니다.

    WHILE ... WEND

    빈 사이클 While의 예를 들어보겠습니다.

    Sub while_loop()
    
        While [상태]
            '지침
        Wend
    
    End Sub
    

    조건이 true인 한 루프의 명령문은 계속 실행됩니다(그러나 무한 루프를 생성하지 않도록 주의하십시오).

    다음은 이전에 논의한 루핑 매크로로, While 루프로 변환되었습니다.

    Sub while_loop()
    
        Dim num As Integer
        num = 1 '시작 번호(이 경우 줄 번호와 설정되는 값)
    
        While num <= 12 'num 변수가 12보다 작거나 같으면 명령이 실행됩니다.
           Cells(num, 1) = num '번호 매기기
           num = num + 1 '루프가 통과할 때마다 숫자가 1씩 증가합니다.
        Wend
           
    End Sub
    

    매크로에서 이 루프를 사용하면 12개가 아닌 400개의 테이프가 필요한 경우 12개를 400개로 바꾸면 됩니다.

    DO ... LOOP

    While Wend(While 명령에 포함된 특정 조건이 true인 동안 실행)과 동일하게 작동하는 루프를 작성하는 또 다른 방법이 있습니다.

    Sub do_while_loop()
    
        Do While [상태]
            '지침
        Loop
    
    End Sub
    

    다음 버전에서는 Do Loop 루프 끝에 조건을 작성할 수 있음을 보여줍니다. 이는 명령이 정확히 한 번 이상 실행된다는 의미입니다.

    Sub do_while_loop()
    
        Do
            '지침
        Loop While [상태]
    
    End Sub
    

    조건이 충족되는 동안 반복하는 대신 While을 Until로 바꾸면 조건에 따라 루프를 종료할 수도 있습니다.

    Sub do_while_loop()
    
        Do Until [상태]
            '지침
        Loop
    
    End Sub
    

    FOR ... TO ... NEXT

    Sub for_loop()
    
        For i = 1 To 5
            '지침
        Next
    
    End Sub
    

    For 루프는 여기서 5번 반복됩니다.

    이 주기가 반복될 때마다 변수 i는 자동으로 1씩 증가합니다.

    Sub for_loop()
    
        For i = 1 To 5
            MsgBox i
        Next
    
    End Sub
    

    조기 루프 종료(Exit)

    다음 명령을 사용하면 For 루프를 조기에 종료할 수 있습니다.

    Exit For 'For 루프 종료
    

    이를 명확하게 보여주는 예를 고려해 보겠습니다.

    Sub for_loop()
        Dim max_loops As Integer
        max_loops = Range("A1") '셀 A1에서는 반복 횟수 제한을 지정했습니다.
    
        For i = 1 To 7 '예상 사이클 수: 7
           If i > max_loops Then '셀 A1이 비어 있거나 7보다 작은 숫자를 포함하는 경우 반복 횟수를 줄입니다.
               Exit For '이전 조건이 TRUE이면 루프 For...loop에서 종료됩니다.
           End If
       
           MsgBox i
        Next
    
    End Sub
    

    기타 Exit 연산자:

    Exit Do '루프 종료 Do Loop
    
    Exit Sub '절차 종료
    
    Exit Function '종료 기능