VBA For Each문을 사용한 예제
In this Article
이 튜토리얼에서는 VBA에서 For Each 반복문을 사용하는 예제들을 보여드립니다. 반복문에 대해 자세히 알아보려면 여기를 클릭하세요.
For Each 반복문
For Each 반복문을 사용하면 컬렉션의 각 객체를 반복할 수 있습니다:
- 범위의 모든 셀
- 통합 문서의 모든 워크시트
- 열려 있는 모든 통합 문서
- 워크시트의 모든 도형
- 배열의 모든 항목
- 기타 등등
For Each: 기본 예제
이 예제에서는 다양한 유형의 객체를 반복하도록 For Each 반복문을 설정하는 방법을 보여드립니다.
셀에 대한 반복문
이 프로시저는 A1:A10 범위의 각 셀을 반복하여 오른쪽 열에 위치한 셀을 같은 값으로 설정합니다.
Sub ForEachCell()
Dim Cell As Range
For Each Cell In Sheets("Sheet1").Range("A1:A10")
Cell.Offset(0, 1).value = Cell.value
Next Cell
End Sub
시트에 대한 반복문
이 프로시저는 통합 문서의 각 시트를 반복하여 각 시트의 숨기기를 해제합니다.
Sub ForEachSheets()
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = True
Next ws
End Sub
통합문서에 대한 반복문
이 프로시저는 각 통합 문서를 반복하여 각 통합 문서를 닫습니다.
Sub ForEachWorkbooks()
Dim wb As Workbook
For Each wb In Workbooks
wb.Close
Next wb
End Sub
도형에 대한 반복문
이 절차는 Sheet1에 있는 모든 도형을 반복하여 도형들을 삭제합니다.
Sub ForEachShape()
Dim Shp As Shape
For Each Shp In Sheets("Sheet1").Shapes
Shp.Delete
Next Shp
End Sub
차트에 대한 반복문
이 절차는 Sheet1의 모든 차트를 반복하여 차트들을 삭제합니다.
Sub ForEachCharts()
Dim cht As ChartObject
For Each cht In Sheets("Sheet1").ChartObjects
cht.Delete
Next cht
End Sub
피벗 테이블에 대한 반복문
이 프로시저는 Sheet1의 모든 피벗 테이블을 반복하여 각 피벗 테이블을 지웁니다.
Sub ForEachPivotTables()
Dim pvt As PivotTable
For Each pvt In Sheets("Sheet1").PivotTables
pvt.ClearTable
Next pvt
End Sub
테이블에 대한 반복문
이 프로시저는 Sheet1의 모든 테이블을 반복하여 각 테이블을 삭제합니다.
Sub ForEachTables()
Dim tbl As ListObject
For Each tbl In Sheets("Sheet1").ListObjects
tbl.Delete
Next tbl
End Sub
배열의 항목에 대한 반복문
이 프로시저는 배열의 각 항목을 반복하여 각 값을 메시지 박스에 표시합니다.
Sub ForEachItemInArray()
Dim arrValue As Variant
Dim Item As Variant
arrValue = Array("Item 1", "Item 2", "Item 3")
For Each Item In arrValue
MsgBox Item
Next Item
End Sub
배열 인덱스에 대한 반복문
이 프로시저는 배열 인덱스를 반복하여 각 값을 메시지 박스에 표시합니다.
Sub ForEachNumberInNumbers()
Dim arrNumber(1 To 3) As Integer
Dim num As Variant
arrNumber(1) = 10
arrNumber(2) = 20
arrNumber(3) = 30
For Each num In arrNumber
Msgbox num
Next num
End Sub
For Each Loop Builder
이 예제는 VBA 애드인(AutoMacro)의 Loop Builder를 사용하여 작성하였습니다.
The Loop Builder를 사용하면 객체를 반복하는 코드를 간편하게 생성할 수 있습니다. AutoMacro에는 다른 많은 코드 생성기, 광범위한 코드 라이브러리, 강력한 코딩 도구도 포함되어 있습니다.
For Each – If
You can also use If Statements within Loops to test if objects meet certain criteria, only performing actions on those objects that meet the criteria. Here is an example of looping through each cell in a range:
For Each Cell in Range – If
Sub If_Loop()
Dim Cell as Range
For Each Cell In Range("A2:A6")
If Cell.Value > 0 Then
Cell.Offset(0, 1).Value = "Positive"
ElseIf Cell.Value < 0 Then
Cell.Offset(0, 1).Value = "Negative"
Else
Cell.Offset(0, 1).Value = "Zero"
End If
Next Cell
End Sub
For Each 구문을 활용한 일반적인 예제
모든 통합문서 닫기
이 프로시저는 열려 있는 모든 통합 문서를 닫고 변경 내용을 저장합니다.
Sub CloseAllWorkbooks()
Dim wb As Workbook
For Each wb In Workbooks
wb.Close SaveChanges:=True
Next wb
End Sub
모든 시트 숨기기
이프로시저는 모든 워크시트를 숨깁니다.
Sub HideAllSheets()
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = xlSheetHidden
Next ws
End Sub
모든 시트 숨기기 해제
이 프로시저는 모든 워크시트의 숨기기를 해제합니다.
Sub UnhideAllSheets()
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = xlSheetVisible
Next ws
End Sub
모든 시트 보호하기
이 프로시저는 모든 워크시트를 보호합니다.
Sub ProtectAllSheets()
Dim ws As Worksheet
For Each ws In Sheets
ws.Protect Password:="..."
Next ws
End Sub
모든 시트 보호 해제하기
이 프로시저는 모든 워크시트의 보호를 해제합니다.
Sub UnprotectAllSheets()
Dim ws As Worksheet
For Each ws In Sheets
ws.Unprotect Password:="..."
Next ws
End Sub
모든 워크시트에서 모든 도형 삭제하기
이 프로시저는 통합 문서에 있는 모든 도형을 삭제합니다.
Sub DeleteAllShapesOnAllWorksheets()
Dim Sheet As Worksheet
Dim Shp As Shape
For Each Sheet In Sheets
For Each Shp In Sheet.Shapes
Shp.Delete
Next Shp
Next Sheet
End Sub
모든 피벗 테이블 새로 고침
이 프로시저는 시트의 모든 피벗 테이블을 새로 고침 합니다.
Sub RefreshAllPivotTables()
Dim pvt As PivotTable
For Each pvt In Sheets("Sheet1").PivotTables
pvt.RefreshTable
Next pvt
End Sub
Access VBA에서 For Each 사용하기
For Each 루프는 Excel VBA에서와 마찬가지로 Access VBA에서도 동일한 방식으로 작동합니다. 다음 예제는 현재 데이터베이스의 모든 테이블을 제거합니다.
Sub RemoveAllTables()
Dim tdf As TableDef
Dim dbs As Database
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
DoCmd.DeleteObject tdf.Name
Loop
Set dbs = Nothing
End Sub