동일한 작업을 반복해서 실행하는 것이 반복문입니다.
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가 되는 식입니다. 따라서, 구구단이 만들어집니다.
실행하면 아래와 같습니다.
'EXCEL - VBA' 카테고리의 다른 글
Excel 추가 기능을 목록에서 지우기 (0) | 2022.12.03 |
---|---|
For Each ~ Next (0) | 2022.11.14 |
VBA 조건문(3) - Select Case(2) - 사용자 정의함수 만들기 (0) | 2022.11.08 |
VBA 조건문(2) - Select Case(1) (0) | 2022.11.07 |
VBA 조건문(1) - If (0) | 2022.11.04 |