루프와 VBA는 잘 어울리며, 그럴 만한 이유도 있습니다. 통합 문서, 워크시트, 범위와 같은 Microsoft Office 개체를 다룰 때 루프를 사용하면 각 개체 사이를 비교적 쉽게 전환할 수 있습니다.

거의 모든 VBA 루프가 개체와 잘 작동하지만, ‘각각에 대해’ 루프는 개체 컬렉션으로 작업하는 데 가장 적합한 옵션 중 하나입니다. Excel VBA를 처음 사용하고 각 루프에 대해 마스터하려는 경우 이러한 예제 중 일부를 통해 빠르게 배울 수 있습니다. 다음은 이 전형적인 루프에 대해 알아야 할 모든 것입니다.

각 루프의 구문

각 루프 구문은 Excel VBA의 일반적인 for 루프와 매우 유사합니다. 구문은 다음과 같습니다:

 For each variable_name in object_collection

[statement]

[statement]

[statement]

Next variable_name

루프는 “for each” 키워드로 시작하며, 변수 이름을 사용할 수 있고 그 뒤에 개체 컬렉션을 사용할 수 있습니다. for each 루프의 개체는 셀, 범위, 시트, 심지어 통합 문서도 될 수 있습니다. 이 루프의 장점은 다양한 Excel 컬렉션으로 유연하게 작업할 수 있다는 점입니다.

루프는 각 컬렉션 값을 순환하고 정의된 변수 이름에 참조를 저장합니다. 실행 후 VBA는 루프 내에 저장된 문을 실행하고 컬렉션의 다음 개체로 이동합니다(여기서 다음 키워드가 도움이 됩니다). 기본적인 예제를 통해 코드 구조를 이해해 봅시다.

Excel VBA에서 각 루프에 대해 사용하는 방법

A1에서 A까지 셀에 숫자를 인쇄하고 싶다고 가정합니다. 가장 좋은 방법은 범위 함수와 함께 각 루프에 대해 사용하고 코드가 필요한 작업을 수행하도록하는 것입니다. 이 간단한 작업을 수행하는 방법은 다음과 같습니다.

⭐ Alt + F11을 눌러 VBA 코드 편집기를 엽니다.

⭐ 삽입 탭에서 모듈 옵션을 클릭하여 모듈을 삽입합니다.

⭐ 코드 편집기 모듈 창에서 sub() 명령을 사용하여 하위 루틴을 만듭니다. 하위 루틴에 의미 있는 이름을 지정해야 합니다. 이 예제에서는 for_each_loop라는 이름을 사용할 수 있습니다.

이 글도 확인해 보세요:  Microsoft Word에서 표를 회전하는 방법

이제 기본 사항이 해결되었으니 코드 작성을 시작할 차례입니다. 하위 루틴 내에서 다음 명령을 입력합니다:

 Dim cell as range

For each cell in Sheets("Sheet1").Range("A1:A10")

cell.value = 10

Next cell

코드가 실행되면 루프 내의 문으로 넘어갈 때 c 변수가 ANext의 값을 저장하고, 명령을 평가하여 정의된 셀, 즉 A1 셀에 10의 값을 입력합니다.

마지막으로, 다음 키워드로 이동하면서 다음 값, 즉 셀 A에 도달할 때까지 루프가 실행되고 이것이 최종 출력입니다:

개체와 함께 루프 사용하기: 셀, 시트 및 통합 문서

Excel에는 정기적으로 작업하는 세 가지 주요 개체 유형이 있습니다. 셀, 시트, 통합 문서가 바로 그것입니다. 다음은 세 가지 개체 유형 모두에 루프를 사용하는 방법입니다.

셀과 루프를 함께 사용하기

시트의 셀 범위에 값과 서식 지정 조건을 추가하려고 한다고 가정합니다. 먼저 루프 내에서 조건을 정의한 다음 서식 지정 명령을 정의해야 합니다.

하위 루틴 내에 다음 코드를 입력합니다.

 Sub for_each_loop()



Dim c As Range



For Each c In Sheets("Sheet1").Range("A1:A10")



With c

.Value = 10

.Font.Color = vbRed

.Font.Bold = True

.Font.Strikethrough = True



End With



Next c



End Sub

with 함수는 하나의 특정 개체로 여러 함수를 수행할 때 유용합니다. c 변수로 일련의 작업을 수행하려는 경우, with…end with 함수를 사용하여 모두 결합할 수 있습니다.

이 루프는 c의 값을 각 셀 값과 동일시하고 값을 추가로 입력한 다음 셀의 색상을 빨간색으로 변경하고 값을 굵게 표시하고 취소선을 긋습니다. 모든 단계를 완료하면 범위에서 정의된 다음 값으로 이동합니다.

루프를 사용하여 시트 제어

위의 예와 유사하게 각 루프에 대해 시트를 제어할 수 있습니다. VBA를 사용하여 시트1의 이름을 시트3으로 변경하는 것은 어떨까요?

다음 코드를 사용하여 VBA를 사용하여 Excel에서 기존 워크시트의 이름을 바꿀 수 있습니다.

 Sub for_each_loop_sheets()



For Each sht In ThisWorkbook.Sheets



If sht.Name = "Sheet1" Then



sht.Name = "Sheet3"



End If



Next sht



End Sub

이 코드는 통합 문서 내의 각 시트를 반복하여 각 시트의 이름을 확인합니다. Sheet1이라는 이름을 발견하면 SheetIt으로 변경하고 통합 문서 내의 나머지 시트(있는 경우)를 계속 진행합니다. 코드 실행이 마지막 시트에 도달하면 루프와 하위 루틴을 종료합니다.

이 글도 확인해 보세요:  Excel의 선택 함수를 사용하여 기준에 따라 데이터를 선택하는 방법

다른 일반적인 용도 중에는 VBA를 사용하여 여러 워크시트를 병합하고 루프를 사용하여 단일 시트의 콘텐츠를 업데이트할 수 있습니다.

루프를 사용하여 통합 문서 전환

마지막으로, 각 루프에 대해를 사용하여 여러 통합 문서를 전환하고 특정 작업을 수행할 수 있습니다. 예제를 통해 이 기능을 시연해 보겠습니다.

VBA 명령을 사용하여 세 개의 새 통합 문서를 추가하고 열려 있는 모든 통합 문서를 함께 닫을 수 있습니다. 방법은 다음과 같습니다:

 Sub loop_wrkbook()



Dim wrkbook as workbook



Workbooks.Add

Workbooks.Add

Workbooks.Add



For Each wrkbook In Workbooks



wrkbook.Close



Next wrkbook



End Sub

위의 코드는 매크로 통합 문서도 닫습니다. 이 코드를 실행하기 전에 코드를 저장했는지 확인하세요.

루프는 여러 용도로 사용할 수 있으므로 여러 통합 문서의 데이터를 단일 통합 문서로 통합할 수도 있습니다.

루프와 함께 중첩된 IF 문 사용

위의 예와 마찬가지로 루프 내에서 IF 문을 사용하여 특정 조건을 확인할 수 있습니다. 셀의 값에 따라 셀의 배경색을 변경해 보겠습니다.

A1 셀에 난수가 몇 개 있음 A1:A 범위의 지정된 각 셀을 순환하는 루프를 작성하여 셀의 값이 10보다 작으면 셀 색상이 빨간색으로 변경되어야 합니다. 셀 값이 10을 초과하면 녹색으로 바뀌어야 합니다. 이를 위해 다음 코드를 사용합니다.

 Sub loop_w_if()



Dim c As Range



For Each c In Sheets("Sheet4").Range("A1:A20")



If c.Value < 10 Then

c.Interior.ColorIndex = 3



Else: c.Interior.ColorIndex = 4

End If



Next c



End Sub

출력은 다음과 같습니다:

Excel VBA에서 루프 사용

Excel VBA는 각 루프에 대해서만 제한되지 않습니다. 다양한 기능을 쉽게 수행할 수 있는 유용한 루프가 많이 있습니다. for 루프, do while, do until 루프와 같은 VBA의 루프를 사용하면 일상적인 수동 작업에서 벗어나 보다 쉽게 작업할 수 있습니다.

By 김민수

안드로이드, 서버 개발을 시작으로 여러 분야를 넘나들고 있는 풀스택(Full-stack) 개발자입니다. 오픈소스 기술과 혁신에 큰 관심을 가지고 있고, 보다 많은 사람이 기술을 통해 꿈꾸던 일을 실현하도록 돕기를 희망하고 있습니다.