VBA 반복문 2탄(For each ~ Next 사용하기)
For ~ next문과 For each ~ next문만 자유롭게 사용가능하다면 업무자동화에 한 발짝 더 다가섰다고 할 수 있습니다. 그만큼 사용빈도가 높고 중요한 내용이라고 할 수 있습니다. 업무자동화를 위해 조금만 더 힘을 내보시죠!
For Each ~ Next문은 For ~ Next에 Each가 추가된 형태입니다. For ~ Next가 지정한 횟수만큼 반복하는 반복문이었다면, For Each ~ Next는 범위 내 개체 또는 배열 내의 요소를 하나씩 접근하여 명령을 실행하는 반복문입니다. 말로는 이해가 어려우니 문법과 예제를 통해 알아보도록 하겠습니다.
▼ 아직 For ~ Next가 익숙해지지 않았다면 먼저 숙지하고 오시는 것이 도움이 됩니다.
For each ~ Next문의 기본문법을 알아보자.
For each ~ Next의 문법은 다음과 같습니다. 앞서 학습했던 For ~ next와 비슷한 형태를 갖고 있네요.
For each 변수 in 범위(컬렉션)
반복할 내용
next
for each ~ next 반복문에서 사용할 개체변수를 개체 형식으로 선언하고 범위 내의 개체를 개체 변수에 입력 후 반복문을 실행합니다. 범위 내 개체 모두 실행이 완료되면 종료되는 프로세스입니다.
회사별 평가점수를 입력할 시트를 1개 만들고 삼성, LG, SK별 워크시트를 각각 1개씩 만들어 줍니다. 총 4개의 워크시트가 필요하며, 데이터는 각 회사별 워크시트에만 입력 후 『점수』 워크시트에 종합하는 프로시저를 만들어 보겠습니다.
먼저 기본정보가 입력된 예시를 한번 살펴보시죠.
워크시트별 회사명과 평균점수를 『점수』 워크시트에 차례대로 붙여 넣는 프로시저를 만들어 보도록 하겠습니다.
Sub test2()
Dim WS As Worksheet
Dim row As Long
' 변수의 속성이 다르기 때문에 줄 바꿈을 하여 구분해 주었습니다.
row = 3
' 점수 워크시트에 기입해야 하는 행이 3행입니다.
For Each WS In Worksheets
' 워크시트 하나하나를 비교하겠다.
If WS.Name <> "점수" Then
' 워크시트의 이름이 점수가 아니면
Range("B" & row).Value = WS.Name
' "B3"셀에 워크시트의 명칭(회사명)을 입력
Range("C" & row).Value = WS.Range("c2").Value
' "C3"셀에 평균점수를 입력
row = row + 1
' 행의 위치를 +1씩 이동하여 반복
End If
' 처음으로 돌아가서 종료될 때까지 반복
Next
End Sub
순서대로 한번 살펴볼까요?
Dim WS As Worksheet / Dim row As Long의 경우 각각이 가지는 속성이 다르기 때문에 줄 바꿈을 통해 구분해 주었어요.
row = 3는 "점수" 워크시트에 기입해야 하는 행이 3행이기 때문에 3행부터 시작하고자 변수로 선언해준 값입니다.
For Each WS In Worksheets ~ Next는 엑셀 워크시트 하나하나를 WS 개체로 반영하겠다는 내용이며, 그 안에 있는 반복할 실행문을 반복하기 위한 시작점이며, Next는 종료되는 부분이라고 생각하시면 좋을 실 것 같아요.
다음은 IF문을 사용하여 워크시트별로 확인하는 절차를 진행하게 되는데요.
If WS.Name <> "점수" Then는 개별 WS의 이름이 "점수"인지를 확인하고 일치하지 않으면 다음 단계로 넘어가겠다는 내용입니다. 다음 행에 사용된 Range("B" & row).Value = WS.Name는 WS가 점수가 아니라면 B3셀에 WS의 이름을 넣겠다는 것이며, Range("C" & row).Value = WS.Range("c2").Value은 C3셀에 평균값을 넣겠다는 것을 나타냅니다.
row = row + 1은 "B3", "C3"셀에 각각의 값이 반영되었으니, "B4", "C4"셀에 값을 반영하기 위해 행의 수를 한 단계 높여주는 작업을 진행한 것입니다. 이렇게 되면 다시 For Each WS In Worksheets로 돌아가서 워크시트의 숫자만큼 반복하여 작업이 진행됩니다. 실행이 완료되었을 때 비로소 Next를 통해 For Each문을 빠져나오게 되는 것이죠.
그럼 결과물을 한번 보시죠!
마치며
VBA에서 반복문만 자유롭게 사용할 수 있다면 정말 많은 것들을 자동화시킬 수 있습니다. 엑셀은 "기술"이 아닌 "기능"이라고 하죠. 반복해서 연습한다면 누구나 도달가능한 능력입니다. 지금은 힘들지라도 업무자동화를 이룩하여 나만의 시간을 만들기 위해 계속 노력해 보자고요!
▼▼▼함께 보면 좋은 정보▼▼▼
노력은 배신하지 않는다.
댓글