EXCEL - VBA

For ~ Next 반복문

별동산 2022. 11. 11. 08:24
반응형

동일한 작업을 반복해서 실행하는 것이 반복문입니다.
For문은 For ~ Next문과 For Each ~ Next문이 있습니다.

먼저 For ~ Next문에 대해 다루고, For Each ~ Next문은 따로 다루도록 하겠습니다.

1. 구문

2. 구문에 대한 설명

counter 필수 요소. 숫자 변수로서 For 루프의 컨트롤 변수.
start 필수 요소. counter의 초기 값.
end 필수 요소. counter의 최종 값.
step 선택 사항. For 루프를 돌 때 매번 변화되는 카운터의 양. 기본값은 1
statements 선택 사항. For와 Next사이에서 지정된 숫자만큼 반복 실행하는 하나이상의 문장
Exit For 선택 사항. For 루프의 밖으로 제어를 이동.
Next 필수 요소. For 루프의 정의를 종료.


3. 사용 예제

(예제 1)
A1셀부터 A10셀까지 1부터 10까지 입력하는 것을 코드로 작성하면 아래와 같습니다.

Option Explicit

Dim i As Integer

Sub fornext1()
    For i = 1 To 10
        Range("a" & i) = i
    Next
End Sub


Option Explicit : 변수 선언을 명시적으로 하라는 구문입니다.

Dim i As Integer : 따라서, i 변수의 데이터 형식을 정수 형식으로 선언했습니다. 그리고, 위치를 sub 프로시저 안이 아니라 맨 위에 선언해서 모든 sub 프로시저에 적용되도록 했습니다.

Sub fornext1()... End Sub : sub 프로시저는 sub 매크로명으로 시작해서 end sub로 끝납니다. 괄호 안에 인수를 넣을 수 있는데, 없다면 비워두면 되고, 매크로명까지 입력한 후 엔터키를 누르면 괄호와 end sub는 자동으로 입력됩니다.

For i = 1 to 10 : i값이 1이 10까지 변하는 동안
Range("a" & i) = i : 셀 주소는 열 이름과 변수를 결합해서 "a" & i 식으로 입력합니다. Cells 속성을 이용하면 Cells(i, "a") 또는 cells(i,1)이 됩니다. 따라서, Range와 Cells는 행과 열을 지정하는 순서가 다르고, 입력 시 &와 ,를 사용하는 점이 다르다는 것을 알 수 있습니다.

Next : For문을 끝내는 것입니다.

실행한 후 엑셀로 돌아가면 A1셀부터 A10셀까지 1부터 10까지 채워졌습니다.


(예제 2)
count값을 2씩 증가시키려면 아래와 같이 작성합니다.

Sub fornext2()
    For i = 1 To 10 Step 2
        Range("b" & i) = i * 2
    Next
End Sub

Step 2 : counter인 i의 값을 2씩 증가시키라는 의미입니다. 따라서, i값을 1,3,5,7,9가 됩니다.

Range("b" & i) = i * 2 : b열 i행에 i에 2를 곱한 값을 입력합니다.

실행하면 아래와 같이 B1, B3셀 등 한 줄씩 떨어져서 2, 6, 10 등 i값에 2를 곱한 값이 입력됐습니다.

(예제 3)
counter의 값을 1씩 감소시키려면 아래와 같이 작성합니다.

Sub fornext3()
    For i = 10 To 1 Step -1
        Range("c" & i) = i
    Next
End Sub

Step -1 : counter인 i의 값을 1씩 빼는 것입니다. 따라서 초기값과 종료 값을 10과 1로 바꿨습니다.

Range("c" & i) = i : C열 i행에 i값을 입력하는 것입니다. 따라서, 아래서부터 값을 채울 뿐 예제 1과 결과는 같습니다.

(예제 4)
숫자를 10부터 1까지 거꾸로 입력하려면 아래와 같이 작성합니다.

Sub fornext4()
    For i = 10 To 1 Step -1
        Range("d" & (11 - i)) = i
    Next
End Sub

Range("d" & (11 - i)) = i : 11 - i로 행 수를 지정하는데, 1부터 10이 되도록 11에서 i값을 빼는 식으로 작성했습니다. Range("d" & 11 - i) = i 식으로 11 - i를 괄호로 감싸지 않아도 연산 우선순위에 따라 제대로 실행되지만 수식을 이해하기 쉽도록 괄호를 입력한 것입니다.

또한 Range("d" & i) = 11- i 식으로 셀 주소가 아니라 입력값을 바꿔도 됩니다.

(예제 5)
exit for 문을 이용해 for 루프를 중간에 빠져나갈 수 있습니다.
예를 들어, 양수에서 0으로 바뀌는 순간 반복문을 멈추고 싶다면 아래와 같이 작성하면 됩니다.

Sub fornext5()
    For i = 5 To -5 Step -1
        If i = 0 Then Exit For
        Range("e" & i) = 6 - i
    Next
End Sub

If i = 0 Then Exit For : counter인 i가 0이라면 for 루프 문을 빠져나가라는 뜻입니다.
따라서, i값이 5부터 1씩 감소하는데, 0이 되면 그다음 줄 Range("e" & i) = 6 - i를 실행하지 않고 For 문 실행을 중단하게 됩니다.

위 매크로를 실행하면 i가 0일 때 실행을 종료하므로 E열에 5부터 1까지만 채워집니다.


(예제 6)
위 구문은 어려우기 어려우므로 이해하기 쉽게 바꾸면 아래와 같습니다.

Sub fornext6()
    For i = 1 To 10
        If i = 6 Then Exit For
        Range("f" & i) = 6 - i
    Next
End Sub

순차적으로 i의 값이 변하므로 이해하기 쉽습니다. 결과는 같고 F열에 입력되도록 했습니다.

(예제 7)
For ~ Next 문을 이중으로, 다시 말해 For루프 안에 For루프를 넣을 수 있습니다.

Sub fornext7()
    Dim j As Integer
    Sheets(2).Select
    For i = 2 To 9
        For j = 1 To 9
            Cells(j, i - 1) = i & "*" & j & "=" & i * j
        Next
    Next
End Sub

Dim j As Integer : i변수는 sub 프로시저 맨 위에 선언해서 모든 프로시저에 적용이 되는데, j변수는 선언하지 않아서 fornext7 프로시저 안에서 선언했습니다.

Option Explicit문이 맨 위에 있기 때문에 변수 선언을 하지 않으면(여기서는 맨 앞에 작은따옴표를 입력해서 주석 처리) '변수가 정의되지 않았다'는 에러 메시지가 표시되면서 실행을 멈춥니다.


확인 버튼을 누르고, 네모 모양 아이콘을 눌러 실행을 멈춘 다음 '주석 블록 해제' 아이콘을 눌러 주석을 해제합니다.


Sheets(2).Select : 두 번째 시트를 선택하라는 뜻입니다. 시트명이 Sheet2가 아니라도 상관없습니다. 만약 시트명을 지정한다고 하면 Sheeets("두번째시트명").Select 식으로 괄호 안에 시트명을 입력합니다. 따라서, 순서를 나타내는 숫자로 지정하는 것이 편리합니다.

For i = 2 To 9
For j = 1 To 9
Cells(j, i - 1) = i & "*" & j & "=" & i * j
Next
Next

For문안에 For문이 들어 있으므로 이중 반복문이 됩니다.
i가 2부터 9까지 변하는 동안 j가 1부터 9까지 변하는데, 두번째 반복문이 다 돈 다음 다시 첫 번째 반복문이 실행되므로
i가 2인 동안 j가 1부터 9까지 변하고, 그다음 i가 3이 되고, 다시 j가 1부터 9까지 변하는 식으로 실행됩니다.

Cells(j, i - 1) = i & "*" & j & "=" & i * j :
Cells(j, i - 1)로 셀 주소를 정하는데, Cells 안에 있는 인수는 행수, 열수입니다. 따라서, 열이 i - 1, 다시 말해 i가 2인 경우는 A열인 동안 1행부터 9행까지 반복하고, i가 3일 때는 B열 1행부터 9행까지 반복합니다.

i & "*" & j & "=" & i * j : &는 결합 연산자로 i & "*"는 i값 2에 * 기호를 결합해서 2*가 되고,
& j는 j가 1이라면 2*1이 되고, & "="은 2*1=이 되며, & i * j는 2와 1을 곱한 값 2와 결합됩니다. 따라서 모두 결합하면
2*1=2가 됩니다.

다시 j가 2가 되면 2*2=4가 되는 식입니다. 따라서, 구구단이 만들어집니다.

실행하면 아래와 같습니다.

fornext문.xlsm
0.02MB
반응형