본문 바로가기
언어 참조

For...Next 문

2023. 8. 4.

이 글은 도움말을 번역한 글입니다.

For...Next 문

지정된 횟수만큼 문 그룹을 반복합니다.

 

Syntax
For counter = start To end [ Step step ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]

 

counter : 필수 항목. 루프 카운터로 사용되는 숫자 변수입니다. 이 변수는 Boolean값이나 배열 요소가 될 수 없습니다.
start : 필수 항목. 카운터의 초기 값입니다.
end : 필수 항목. 카운터의 최종 값입니다.
step : 선택적 항목. 루프를 반복할 때마다 카운터가 변경되는 양을 지정합니다. 지정하지 않으면 기본값은 1입니다.
statements : 선택적 항목. For와 Next 사이에서 실행되는 하나 이상의 문장으로, 지정된 횟수만큼 실행됩니다.

For 문 예시

다음 프로시저는 컴퓨터에서 신호음을 50회 울리게 합니다. For 문은 카운터 변수와 시작 및 종료 값을 지정합니다. Next 문은 카운터 변수를 1씩 증가시킵니다.

Sub Beeps()

    Dim x As Integer
    
    For x = 1 To 50
        Beep
    Next x
    
End Sub

Step 키워드

step 인수는 양수 또는 음수일 수 있습니다. step 인수의 값은 다음과 같이 루프 처리를 결정합니다.

Value Loop executes if
Positive or 0 counter <= end
Negative counter >= end

Step 키워드를 사용하면 카운터 변수를 지정한 값만큼 증가 또는 감소시킬 수 있습니다. 다음 예제에서는 루프가 반복될 때마다 카운터 변수가 2씩 증가합니다. 루프가 완료되면 2, 4, 6, 8, 그리고 10의 합계가 됩니다.

Sub TwosTotal()

    Dim j As Integer
    Dim total As Integer
    
    For j = 2 To 10 Step 2
        total = total + j
    Next j
    
    Debug.Print "The total is " & total
    
End Sub

' 출력 결과
' The total is 30

카운터 변수를 감소시키려면 음수 값의 Step을 사용합니다. 또한 카운터 변수를 감소시키려면 시작 값보다 작은 종료 값이 지정되어야 합니다. 다음 예제에서는 루프가 반복될 때마다 카운터 변수가 2씩 감소합니다. 루프가 완료되면 16, 14, 12, 10, 8, 6, 4, 그리고 2의 합계가 됩니다.

Sub NewTotal()

    Dim myNum As Integer
    Dim total As Integer

    For myNum = 16 To 2 Step -2
        total = total + myNum
    Next myNum
    
    Debug.Print "The total is " & total
    
End Sub

' 출력 결과
' The total is 72

메모

Next 문 뒤에 카운터 변수 이름을 포함할 필요는 없습니다. 이전 예제에서는 가독성을 위해 카운터 변수 이름이 포함되었습니다.

Exit For

카운터가 끝 값에 도달하기 전에 Exit For 문을 사용하여 For...Next 문을 종료할 수 있습니다.

Sub ExitForExample()
    Dim i As Integer
    
    For i = 1 To 10
        If i = 5 Then
            Debug.Print "카운터가 5에 도달하여 루프를 종료합니다."
            Exit For ' 카운터가 5일 때 루프를 종료합니다.
        Else
            Debug.Print "현재 카운터 값: " & i
        End If
    Next i
End Sub

' 출력 결과
' 현재 카운터 값: 1
' 현재 카운터 값: 2
' 현재 카운터 값: 3
' 현재 카운터 값: 4
' 카운터가 5에 도달하여 루프를 종료합니다.

종료하는 대체 방법으로 루프의 아무 곳에나 원하는 수의 Exit For 문을 배치할 수 있습니다. Exit For는 종종 If...Then과 같은 일부 조건을 평가한 후에 사용되며 제어를 Next 바로 다음 문으로 넘깁니다.

Sub Example()
    Dim i As Integer
    Dim targetValue As Integer
    targetValue = 5 ' 찾고자 하는 값

    For i = 1 To 10
        If i = targetValue Then
            Debug.Print "원하는 값 " & targetValue & "을(를) 찾았습니다. 루프를 종료합니다."
            Exit For ' 원하는 값이 발견되면 루프를 종료합니다.
        Else
            Debug.Print "현재 카운터 값: " & i
        End If
    Next i
End Sub

' 출력 결과
' 현재 카운터 값: 1
' 현재 카운터 값: 2
' 현재 카운터 값: 3
' 현재 카운터 값: 4
' 원하는 값 5을(를) 찾았습니다. 루프를 종료합니다.

Nested For

하나의 For...Next 루프를 다른 루프 안에 배치하여 For...Next 루프를 중첩할 수 있습니다. 각 루프에 고유한 변수 이름을 카운터로 지정합니다.

Sub NestedForExample()
    Dim i As Integer
    Dim j As Integer
   
    ' 바깥쪽 루프: 1부터 3까지 반복
    For i = 1 To 3
        ' 안쪽 루프: 1부터 3까지 반복
        For j = 1 To 3
            ' 두 개의 카운터 i와 j 값을 출력
            Debug.Print "i: " & i & ", j: " & j
        Next j
    Next i
End Sub

' 출력 결과
' i: 1, j: 1
' i: 1, j: 2
' i: 1, j: 3
' i: 2, j: 1
' i: 2, j: 2
' i: 2, j: 3
' i: 3, j: 1
' i: 3, j: 2
' i: 3, j: 3

비고

모든 루프 내의 문장들이 실행된 후에, step이 counter에 추가됩니다. 이 시점에서, 루프 내의 문장들이 다시 실행되거나 (루프가 처음 실행되도록 한 동일한 조건에 따라) 루프를 종료하고, Next 문 다음의 문장으로 실행이 계속됩니다.

 

이해를 돕기 위해 위 문장을 설명하면 다음과 같습니다.

1. For 문이 실행되면, 루프 카운터(counter) 변수는 start 값으로 초기화됩니다.
2. 루프가 반복될 때마다 statements 부분의 코드가 실행되며, 이는 지정된 횟수만큼 반복됩니다.
3. 루프 내의 모든 문장들이 실행된 후에 Step 값이 루프 카운터에 추가됩니다.
4. 이 시점에서, 루프 내의 문장들이 다시 실행되거나 루프를 종료합니다. 이 동작은 루프가 처음 실행되도록 한 동일한 조건에 따라 결정됩니다.
5. Next 문 다음의 문장으로 실행이 계속됩니다.

 

위 설명에 대한 간단한 예제입니다.

Sub LoopExample()
    Dim i As Integer
    
    For i = 1 To 10 Step 2
        ' Step이 2로 지정되었기 때문에 루프의 카운터 변수인 i는 1부터 시작하여 2씩 증가합니다.
        ' 따라서 i 값은 1, 3, 5, 7, 9 순서로 변합니다.
        Debug.Print "현재 카운터 값: " & i
        
        If i = 5 Then
            ' i가 5가 되면, 루프의 다음 반복은 'Step 2'에 따라 i가 2 증가하므로 7이 됩니다.
            ' 다음 반복에서는 7로 조건이 만족되지 않으므로 루프가 종료됩니다.
            Debug.Print "카운터가 5이므로 루프를 종료합니다."
            Exit For
        End If
    Next i
    
    ' 루프가 종료되었지만, 이후에 실행될 문장을 정의합니다.
    Debug.Print "루프 완료"
End Sub

' 출력 결과
' 현재 카운터 값: 1
' 현재 카운터 값: 3
' 현재 카운터 값: 5
' 카운터가 5이므로 루프를 종료합니다.
' 루프 완료

Tip

루프 내에서 카운터 값을 변경하면 코드를 읽고 디버깅하기가 더 어려워질 수 있습니다.

Sub LoopExample()
    Dim i As Integer

    For i = 1 To 10
        Debug.Print i ' 현재 카운터 값 출력

        ' 카운터 값 변경으로 인한 예기치 않은 동작 발생
        If i = 5 Then
            i = i - 3 ' 카운터 값을 변경 (디버깅하기 어려워질 수 있는 상황)
        End If
    Next i
    
End Sub

 

 

Note

Next 문에서 카운터를 생략하면 카운터가 포함된 것처럼 실행이 계속됩니다. 해당 For 문 앞에 Next 문이 있으면 오류가 발생합니다.

 

이 문장은 글자 그대로 코드를 만들어 봤습니다.

Sub InvalidForLoopExample()
    Dim i As Integer
    
    Next i ' 오류: For 문에 대응하는 Next 문이 없습니다.
    
    For i = 1 To 5
        ' 1부터 5까지의 숫자를 출력합니다.
        Debug.Print i
    Next i
End Sub

도움말 출처

 

 

 

Using For...Next statements (VBA)

Office VBA reference topic

learn.microsoft.com

 

 

For...Next statement (VBA)

Office VBA reference topic

learn.microsoft.com

 

'언어 참조' 카테고리의 다른 글

Do...Loop 문  (0) 2023.08.05
For Each...Next 문  (0) 2023.08.04
인수를 효율적으로 전달하기  (0) 2023.08.04
매개변수 배열 이해  (0) 2023.08.04
명명된 인수 및 선택적 인수 이해  (0) 2023.08.03