세진세상

VBA 반복문 #1(For Next, For Each Next) 본문

VBA

VBA 반복문 #1(For Next, For Each Next)

세진세상 2018. 1. 31. 18:46

VBA 반복문 #1


프로그래밍을 하다보면 반복적인 수행이 필요할 때가 많다.

그렇기 때문에 반복문은 지난 번에 학습한 조건문 만큼이나 중요하다.


반복문은 흔히 수행 횟수를 설정하여 해당 횟수만큼 수행을 반복하거나,

수행 조건을 부여하여 해당 조건이 참 또는 거짓일 경우 계속해서 수행한다.

이번에는 전자의 설정한 수행 횟수만큼 반복하는 구조를 학습하겠다.


For ~ Next문

For 카운터 변수 = 시작값 to 끝값

반복 수행 코드

Next 카운터 변수

의 형태를 기본 구조로 한다.


카운터 변수가 수행 횟수의 설정이다.

이는 시작값부터 매 반복마다 기본적으로 1씩 증가하고,

끝값에 도달하면 마지막으로 반복 코드를 수행하게 된다.

간단한 예시 코드를 실습해보자.


크기 3의 배열을 생성하여 각 주소에 0부터 2의 제곱을 입력하고, 그 값을 출력하자.

1
2
3
4
5
6
7
8
9
10
Sub For_Next_ex1()
    Dim arr(2As Double    '크기 3의 배열
    Dim i As Double         '카운터 변수
    
    For i = 0 To 2
        arr(i) = i ^ 2
        Debug.Print arr(i)
    Next i
    
End Sub
cs


반복문은 카운터 변수 i가 0부터 2까지 반복하는 동안

배열에 i의 제곱을 각 주소에 저장하고, 그 값을 출력한다.


For ~ Next문을 설명할 때, 카운터 변수는 기본적으로 1씩 증가한다고 설명했다.

이 말은 증가하는 값을 설정도 가능하다는 뜻이다.


For 카운터 변수 = 시작값 to 끝값 Step 인수

반복 수행 코드

Next 카운터 변수


카운터 변수의 끝값을 설정하고 그 다음에 Step 코드를 입력하여 증/감 수치를 설정할 수 있다.

물론 위처럼 명시하지 않으면 기본 설정인 1씩 증가하게 된다.


크기가 6인 배열을 생성하여, 0번을 포함한 짝수번 주소에만 번호의 제곱을 저장하고 출력하자.

1
2
3
4
5
6
7
8
9
10
Sub For_Next_Ex2()
    Dim arr(5As Double
    Dim i As Double
    
    For i = 0 To 5 Step 2
        arr(i) = i ^ 2
        Debug.Print arr(i)
    Next i
    
End Sub
cs


지금은 인수를 2로 하였지만, 음수도 가능하니 직접 해보도록 하자.


보통 이런 반복문을 익힐 때는 단골 메뉴가 있다.

우리가 아주 어렸을 때, 어디서 누가 처음 시작했는지도 모르는 멜로디로 흥얼거리며 외웠던,

요즘에는 I.O.I 출신의 갓세정이와 음... ㅈㅅ;; 여튼 세정이의 소속 걸그룹인

여타 수식어가 많았지만, 그래 맞아 구구단이다.

구구단이 실습 예제의 단골인 이유는 바로 2중 For문의 활용이기 때문이다.

구체적으로 말하자면, For문 안에 또 다른 For문을 넣어, 각각의 카운터 변수에 따른 코드의 반복 수행이다.

그럼 구구단을 2단부터 9단까지 모두 출력해보자.

1
2
3
4
5
6
7
8
9
10
11
Sub For_Next_Ex3()
    Dim i As Double
    Dim j As Double
    
    For i = 2 To 9
        For j = 1 To 9
            Debug.Print i; " x "; j; " = "; i * j
        Next j
        Debug.Print
    Next i
End Sub
cs


보면 알겠지만 첫 반복문의 카운터 변수 i는 2로 시작하고 다음 반복문의 카운터 변수 j가 1부터 9까지 코드 반복하게 된다.

j의 반복이 끝나면, i가 3이 되고 다시 j의 수행이 반복된다. 구구단 구현이 이렇게 반복문을 이해하는데 효과적이다. 

For ~ Next문은 이 정도로 마치고, 다른 반복문을 학습해보자.


For Each ~ Next문

For Each 객체 변수 In 객체컬랙션

반복코드

Next

의 기본 구조를 가진다.


영어를 아주 쬐~끔만 할 줄 안다면, 벌써 이해했을 것이다.

객체컬랙션이라는 주머니에 든 각 객체마다 반복 코드를 수행하는 구조다.

하지만 단순히 주머니라고 생각하면 곤란하고, 객체에는 주소와 그 순서가 정해져 있다.

다시 말해 첫 주소의 객체부터 마지막 객체까지 순차적으로 코드를 수행한다는 뜻이다.

위의 For ~ Next와 비슷하지만, 설정되는 반복의 형태가 제한적이다.

어떻게 사용되는지 예제로 실습해보자.


배열에 0, 1, 4, 9를 입력하고, 배열의 각 요소를 하나씩 출력하자.

1
2
3
4
5
6
7
8
Sub For_Each()
    arr = Array(0149'배열을 만들어 값도 바로 입력하는 방법, 추천x
    
    For Each arr_i In arr
        Debug.Print arr_i
    Next
    
End Sub
cs


arr_i는 임의로 설정한 객체의 이름이다. 결과에서 알 수 있듯이 따로 지정하지 않았지만, 객체가 순서대로 수행되었음을 알 수 있다.

For Each ~ Next문의 예시는 보통 worksheet를 이용해서 실습하곤 하는데,

Excel 시트와 연동하는 코드는 나중에 익히도록 하겠다.

지금은 반복문을 그 자체를 이해하는데 집중하자.


지금까지 수행 횟수 지정을 통해 코드를 반복 수행하는 반복문을 학습하였다.

다음에는 조건식의 충족 여부에 따른 반복문을 알아보겠다.


Comments