안녕하세요 모닝수잔입니다 :)

 

코딩 공부를 하면서 가장 기본으로 배웠던 구문은 반복적인 행동을 할 때 필요한 For문이었는데요, 매크로에서도 어김없이 만나게 되었습니다. 지난 포스팅에서 변수의 선언 Dim과 변수의 할당 Set을 통해 하나의 특정 제품 "수량"과 "단가" 변수를 만들고 값을 할당해준 뒤 2개의 변수를 곱한 "총액"을 구하는 매크로를 만들어봤다면, 오늘은 좀 더 나아가 For문을 활용하여 하나의 제품이 아닌 여러 제품의 "총액"을 구하는 매크로를 만들어보겠습니다.

 


For 변수(i) = 시작 To 끝

명령

Next 변수(i)

 

※ 여기에서 변수는 보통 i로 사용합니다.


본격적으로 시작하기에 앞서 간단하게 For문을 정리해봤는데요, 쉽게 말해 For문은 변수 i를 만들어서 "시작"과 "끝" 값을 부여해주고, 해당 범위 안에서 동일한 명령을 계속 반복하게 해주는 반복 구문입니다. 예제 표를 함께 보실까요? 우리가 구하려는 부분은 바로 아래 화면의 빨간칸에 있는 E3, E4, E5셀의 "총액" 부분입니다.

 

 

이전 포스팅에서는 아래와 같이 "수량"이라는 변수를 선언한 뒤 C3 셀의 값을 부여해주고, "단가"라는 변수를 선언한 뒤 D3 셀의 값을 부여해주고, 마지막에는 E3 셀의 값에 "수량" * "단가" 의 값을 넣어 A1 프린터의 "총액"을 구하는 매크로를 만들어봤습니다.

 

2020/12/27 - [코딩/Excel Macro(VBA)] - 변수의 선언 Dim과 변수의 할당 Set

 

하/지/만,

 

이렇게 매크로를 만들게 되면 B1 프린터와 C1 프린터의 총액을 구하기 위해서 C4, D4, C5, D5 셀까지 모두 변수를 선언하고 값을 부여하는 복잡한 과정을 거쳐야 하는데요, 이때 필요한 것이 바로 For문입니다.

 

1) 먼저 엑셀의 개발도구 - Visual Basic - 삽입 - 모듈에서 새로운 모듈을 만들고 Sub 프로시저를 열어줍니다.

 

 

2) Dim을 사용해서 "수량"과 "단가"를 Range 형식의 변수로 선언합니다.

 

여기까지는 이전에 만들었던 매크로와 동일합니다. 다만, 이제 "수량"과 "단가" 변수에는 각각 C3셀과 D3셀의 정해진 값만 부여해주는게 아니라, A1 프린터에 대해서는 C3셀과 D3셀을 ▶ B1 프린터에 대해서는 C4셀과 D4셀을 ▶ C1 프린터에 대해서는 C5셀과 D5셀을 부여해줘야 하는데요.

 

 

3) For문을 사용해서 i라는 변수에 3에서 5의 값을 할당해줍니다.

 

이제 For문 공식에 해당 내용을 대입해보겠습니다.

 

For 변수 = 시작 To 끝 ▶ For i = 3 To 5

명령

Next 변수

 

For문의 첫번째 줄인 "For 변수 = 시작 To 끝"은 특정 행동(명령)을 몇번이나 반복할지 시작과 끝을 지정하고 변수에 할당함으로써 "반복구간"을 정한다고 생각하시면 됩니다. 우리가 필요한 값은 C와 D열의 3, 4, 5행에 있는 A1, B1, C1 프린터의 "수량"과 "단가"입니다. 그럼 이 "수량"과 "단가"는 행(row)과 열(column)의 조합에서 어떤 부분이 변할까요? 맞습니다. C와 D열은 고정이고 3, 4, 5행만 변하기때문에, i라는 변수를 만들고 3에서 5까지 3 To 5라는 반복구간 범위를 지정해줍니다.

 

 

4) Set과 3)에서 선언한 변수i를 사용해서 "수량"과 "단가"에 값을 할당해주고, "수량"과 "단가"를 곱해서 "총액"을 구해줍니다.

 

For 변수 = 시작 To 끝

명령 ▶ Set 수량 = Range("C" & i) / Set 단가 = Range("D" & i) / Range("E" & i) = 수량 * 단가

Next 변수

 

A1 프린터의 "수량"과 "단가"는 C3과 D3에, B1 프린터의 "수량"과 "단가"는 C4와 D4에, C1 프린터의 "수량"과 "단가"는 C5, D5에 있기 때문에 변수 i를 활용해서 셀(Cell)의 이름을 다시 만들어줘야 합니다. 즉, 셀의 이름을 Ci와 Di로 표현하면 첫번째 For문에서는 i에 3이 부여되면서 C3, D3이 되고 두번째 For문에서는 i에 4가 부여되면서 C4, D4가 되고 마지막 세번째 For문에서는 i에 5가 부여되면서 C5, D5이 됩니다. 이를 Range로 표현하면 Range("C" & i)와 Range("D" & i)로 표현할 수 있습니다.

 

마찬가지로 이제 "수량"과 "단가"의 곱으로 "총액"을 구할 수 있는데요, Range("E" & i)의 범위에 수량 * 단가의 값을 부여하면 총액을 구할 수 있습니다.

 

※ Range("C" & i) = Cells(i, "C")

Range("C" & i)는 C열의 i행 범위라는 뜻이고 Cells(i, "C")는 Ci셀이라는 의미로 두 개의 값은 동일한 값입니다. 다만, 매크로를 만들 때 Range로 표현했다면 모두 Range로, Cells로 표현했다면 모두 Cells로 표현해줘야 동일한 형식으로 오류가 발생하지 않습니다 :)

 

5) 마지막으로 Next i로 For문을 닫고, End Sub으로 프로시저를 닫아줍니다.

 

For 변수 = 시작 To 끝

명령

Next 변수 ▶ Next i

 

For문은 "Next 변수"라는 구문으로 끝이납니다. 첫번째 줄 "For 변수 = 시작 To 끝"에서 범위을 정해줬기 때문에 첫번째 For문에서 명령을 실행하고 Next 변수를 통해 다음 변수 값으로 넘어가서 명령을 반복실행 할 수 있기 때문이랍니다. 예를 들어, 우리가 위에서 정한 For i = 3 To 5에서 Next i가 6이라면 For문은 더이상 실행되지 않습니다. 마지막 끝 변수값인 5를 넘어서 더이상 반복 구간이 아니기 때문입니다. 

 

아래는 최종 프로시저입니다. For문은 매크로를 사용할 때 굉장히 유용하게 활용할 수 있는 구문인데요, 다음 포스팅에서는 For문과 마찬가지로 유용하게 활용할 수 있는 if문을 가지고 돌아오겠습니다. 그럼 오늘도 좋은 하루 되세요 :)

 

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기