루프와 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라는 이름을 사용할 수 있습니다.
이제 기본 사항이 해결되었으니 코드 작성을 시작할 차례입니다. 하위 루틴 내에서 다음 명령을 입력합니다:
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으로 변경하고 통합 문서 내의 나머지 시트(있는 경우)를 계속 진행합니다. 코드 실행이 마지막 시트에 도달하면 루프와 하위 루틴을 종료합니다.
다른 일반적인 용도 중에는 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의 루프를 사용하면 일상적인 수동 작업에서 벗어나 보다 쉽게 작업할 수 있습니다.