VBA For Each문을 사용한 예제

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Younjung Kim

Last updated on 4월 14, 2023

이 튜토리얼에서는 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를 사용하여 작성하였습니다.

vba 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

vba for each cell in range

 

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
vba-free-addin

VBA 코드 예시 추가 기능

본 웹사이트에 있는 모든 코드 예시에 쉽게 접근해보세요.

메뉴로 이동하여 클릭만 하면 코드는 모듈에 바로 입력됩니다. .xlam 추가 기능.

(설치가 필요 없습니다!)

무료 다운로드

VBA 코드 예시로 돌아가기