엑셀 VBA에서 For Each 문은 컬렉션(Collection)이나 배열(Array)의 모든 요소를 반복할 때 사용됩니다.
즉, 각 요소를 하나씩 자동으로 가져오며 루프를 실행하는 방식입니다.
1. 기본 문법
For Each 요소변수 In 컬렉션
' 실행할 코드
Next 요소변수
|
- 요소변수 → 반복문에서 개별 항목을 담을 변수
- 컬렉션 → Range, Sheets, Workbooks, Shapes, Array 등 여러 개의 요소가 있는 개체
📌 컬렉션(집합형 데이터)에서 요소를 하나씩 순서대로 가져옴
📌 배열(Array), 범위(Range), 워크시트(Sheets), 셀(Cells), 파일(File) 등에 사용 가능
2. 기본 사용 예제 (For Each로 범위 내 모든 셀에 값 입력)
Sub 기본_ForEach()
Dim cell As Range
For Each cell In Range("A1:A5")
cell.Value = "안녕하세요!"
Next cell
End Sub
|
📌 A1:A5 범위의 모든 셀에 "안녕하세요!" 입력
📌 For 문보다 직관적이며 가독성이 좋음
3. 배열(Array)에서 모든 요소 출력
Sub 배열_ForEach()
Dim 과일들 As Variant
과일들 = Array("사과", "바나나", "포도", "딸기")
Dim 과일 As Variant
For Each 과일 In 과일들
Debug.Print 과일
Next 과일
End Sub
|
📌 출력 (Immediate 창에서 확인)
사과
바나나
포도
딸기
|
📌 배열의 모든 요소를 출력하는 방법 (For Each 활용)
4. 모든 시트 이름 출력
Sub 모든시트_출력()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
Debug.Print "시트 이름: " & ws.Name
Next ws
End Sub
|
📌 출력: "시트 이름: Sheet1", "시트 이름: Sheet2" ...
📌 현재 엑셀 파일(ThisWorkbook)의 모든 시트 이름을 출력
5. 워크북(파일) 전체 순회
Sub 모든워크북_출력()
Dim wb As Workbook
For Each wb In Workbooks
Debug.Print "열린 파일: " & wb.Name
Next wb
End Sub
|
📌 현재 열려 있는 모든 엑셀 파일(워크북) 이름 출력
6. 시트에서 특정 값이 있는 셀 색칠
Sub 특정값_강조()
Dim cell As Range
For Each cell In ActiveSheet.UsedRange
If cell.Value = "중요" Then
cell.Interior.Color = RGB(255, 255, 0) ' 노란색
End If
Next cell
End Sub
|
📌 현재 시트에서 "중요" 값이 있는 셀을 노란색으로 변경
7. 모든 시트에서 특정 값을 찾아 색칠
Sub 모든시트_특정값강조()
Dim ws As Worksheet, cell As Range
For Each ws In ThisWorkbook.Sheets
For Each cell In ws.UsedRange
If cell.Value = "중요" Then
cell.Interior.Color = RGB(255, 0, 0) ' 빨간색
End If
Next cell
Next ws
End Sub
|
📌 모든 시트에서 "중요" 값을 찾고 빨간색으로 변경
8. 모든 시트에서 빈 셀 찾기
Sub 빈셀_찾기()
Dim ws As Worksheet, cell As Range
For Each ws In ThisWorkbook.Sheets
For Each cell In ws.UsedRange
If IsEmpty(cell.Value) Then
cell.Interior.Color = RGB(0, 255, 0) ' 초록색
End If
Next cell
Next ws
End Sub
|
📌 모든 시트에서 빈 셀을 찾아 초록색으로 변경
9. 모든 차트 개체 확인
Sub 모든차트_확인()
Dim 차트 As ChartObject
For Each 차트 In ActiveSheet.ChartObjects
Debug.Print "차트 이름: " & 차트.Name
Next 차트
End Sub
|
📌 현재 시트의 모든 차트 이름을 출력
10. 모든 도형(Shape) 확인
Sub 모든도형_출력()
Dim shp As Shape
For Each shp In ActiveSheet.Shapes
Debug.Print "도형 이름: " & shp.Name
Next shp
End Sub
|
📌 현재 시트의 모든 도형(Shape) 이름을 출력
11. 폴더 내 모든 파일 출력 (FileSystemObject 활용)
Sub 폴더내_모든파일_출력()
Dim fso As Object, 폴더 As Object, 파일 As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set 폴더 = fso.GetFolder("C:\Users\Public\Documents") ' 원하는 폴더 경로 설정
For Each 파일 In 폴더.Files
Debug.Print "파일명: " & 파일.Name
Next 파일
End Sub
|
📌 지정된 폴더 내 모든 파일의 이름을 출력
📝 정리
기능
|
VBA 코드
|
범위 내 모든 셀에 값 입력
|
For Each cell In Range("A1:A5") : cell.Value = "안녕하세요!" : Next cell
|
배열 요소 출력
|
For Each 요소 In Array("사과", "바나나") : Next 요소
|
모든 시트 이름 출력
|
For Each ws In ThisWorkbook.Sheets : Debug.Print ws.Name : Next ws
|
모든 열린 엑셀 파일 출력
|
For Each wb In Workbooks : Debug.Print wb.Name : Next wb
|
특정 값이 있는 셀 색칠
|
For Each cell In ActiveSheet.UsedRange : If cell.Value = "중요" Then cell.Interior.Color = RGB(255,255,0) : Next cell
|
모든 시트에서 특정 값 찾기
|
For Each ws In ThisWorkbook.Sheets : For Each cell In ws.UsedRange : Next cell, Next ws
|
빈 셀 색칠
|
If IsEmpty(cell.Value) Then cell.Interior.Color = RGB(0,255,0)
|
모든 차트 개체 출력
|
For Each chart In ActiveSheet.ChartObjects : Debug.Print chart.Name : Next chart
|
모든 도형(Shape) 출력
|
For Each shp In ActiveSheet.Shapes : Debug.Print shp.Name : Next shp
|
폴더 내 모든 파일 출력
|
For Each 파일 In 폴더.Files : Debug.Print 파일.Name : Next 파일
|
🔥 VBA의 For Each 문을 활용하면 다양한 개체를 쉽게 반복 처리할 수 있습니다!