본문 바로가기
  • 반가워요 : )
엑셀

VBA For Each 구문, 반복 작업을 자동화하기

by 교육의 기울기 2024. 8. 9.
반응형



For Each 구문은 비슷한 객체(collection)들을 순회하며 작업을 수행하는 데 유용합니다. 이 글에서는 For Each loop 구문의 기초부터 실제 코드 예제까지, 다양한 VBA 코드 활용법을 살펴보겠습니다.

VBA For Each 구문이란?


**For Each** 구문은 Excel VBA에서 컬렉션(Collection) 내의 모든 항목을 순회하는 반복문입니다. 예를 들어, 모든 워크시트(Worksheets), 셀(Ranges), 도형(Shapes), 차트(Charts) 등을 반복하며 특정 작업을 수행할 수 있습니다.

For Each 구문은 일반적인 For Next 반복문과 달리, 컬렉션 내에 포함된 항목의 개수를 사전에 알 필요 없이 사용할 수 있어 매우 유연합니다.

VBA For Each 구문의 기본 사용법

For Each 구문을 간단한 예제 코드로 살펴보겠습니다.

```vba
Sub Protect_All_Sheets()
    Dim Sh As Worksheet
    For Each Sh In ThisWorkbook.Worksheets
        Sh.Protect Password:="test", AllowFormattingCells:=True
    Next Sh
End Sub
```

 

이 코드는 먼저 sh라는 변수를 worksheet으로 선언
이 코드는 현재 작업 중인 Excel 워크북의 각각의 시트를 보호모드로 바꾸고, 비밀번호를 설정합니다. 사용자가 셀 서식을 변경할 수 있도록 허용합니다. For Each 코드는 워크북 내 모든 시트를 자동으로 순회하며 `Protect` 메서드를 적용합니다.

 

더보기
워크시트에 protect를 사용하면 사용가능한 옵션들이 다양하다. 이는 ms홈페이지에서 참조하면된다.

 

위는 보호를 푸는 코드의 예시입니다,

 

참고로 말씀드리면, vba코드를 잠그는 방법도있습니다. 만약 누군가가, 보호를 풀기위해서, vba 코드를 보려고 할수도있으니까요.

 

도구 - VBA 프로젝트 속성 - 보호탭 - 읽기전용으로 프로젝트 잠금 - 패스워드설정



셀 범위에 For Each 구문 적용하기

셀 범위 내의 각 셀에 동일한 작업을 적용하고 싶을 때도 **For Each** 구문이 유용합니다. 예를 들어, A1에서 A10까지의 셀에 값을 입력하는 코드는 다음과 같습니다.

```vba
Sub Loop_Through_Cells()
    Dim Cell As Range
    For Each Cell In Range("A1:A10")
        Cell.Value = "Looped"
    Next Cell
End Sub
```



이 코드는 A1부터 A10까지의 각 셀에 "Looped"라는 텍스트를 입력합니다.

다른 객체 컬렉션에 For Each 구문 적용하기

For Each 구문은 셀과 워크시트 외에도 Excel의 다른 객체들에도 적용할 수 있습니다. 예를 들어, 현재 시트에 있는 모든 도형의 색상을 변경하거나 차트 제목을 업데이트할 수 있습니다.

- 도형의 색상 변경하기:

  ```vba
  Sub Loop_Through_Shapes()
      Dim Shp As Shape
      For Each Shp In ActiveSheet.Shapes
          Shp.Fill.ForeColor.RGB = RGB(255, 0, 0)
      Next Shp
  End Sub
  ```



- 차트 제목 업데이트하기:

  ```vba
  Sub Loop_Through_Charts()
      Dim Ch As ChartObject
      For Each Ch In ActiveSheet.ChartObjects
          Ch.Chart.ChartTitle.Text = "Updated Title"
      Next Ch
  End Sub
  ```

 

 

FOR EACH 와 IF THEN

위의 두 방식을 조합하면, 반복문 내에서 더욱 정교한 논리 처리가 가능해집니다. 다양한 상황에 적용할 수 있는 몇 가지 예시 코드를 소개합니다. 조건부 서식과 비슷한 코드가 되겠습니다.

 

아래에서 이러한 코드들의 예시를 보세요.


예제 1: 특정 조건에 따라 셀 서식 변경하기

이 코드는 범위 내의 셀을 순회하며, 셀 값이 50보다 큰 경우 해당 셀의 배경색을 노란색으로 변경합니다.

```vba
Sub Highlight_Cells_Above_50()
    Dim Cell As Range
    For Each Cell In Range("A1:A10")
        If Cell.Value > 50 Then
            Cell.Interior.Color = RGB(255, 255, 0) ' 노란색
        End If
    Next Cell
End Sub
```



예제 2: 특정 텍스트를 포함한 셀 찾기

이 코드는 지정된 범위에서 특정 단어(예: "Critical")가 포함된 셀을 찾아 해당 셀의 텍스트를 굵게 표시합니다.

```vba
Sub Bold_Critical_Text()
    Dim Cell As Range
    For Each Cell In Range("B1:B20")
        If InStr(Cell.Value, "Critical") > 0 Then
            Cell.Font.Bold = True
        End If
    Next Cell
End Sub
```



예제 3: 특정 시트만 보호하기

이 코드는 현재 워크북 내의 모든 시트를 순회하며, 시트 이름에 "Report"가 포함된 경우에만 시트를 보호합니다.

```vba
Sub Protect_Report_Sheets()
    Dim Sh As Worksheet
    For Each Sh In ThisWorkbook.Worksheets
        If InStr(Sh.Name, "Report") > 0 Then
            Sh.Protect Password:="mypassword"
        End If
    Next Sh
End Sub
```



예제 4: 특정 조건에 따라 도형의 크기 조정하기

이 코드는 현재 시트에 있는 모든 도형을 순회하며, 도형의 이름에 "Button"이 포함된 경우 해당 도형의 크기를 150%로 확대합니다.

```vba
Sub Resize_Buttons()
    Dim Shp As Shape
    For Each Shp In ActiveSheet.Shapes
        If InStr(Shp.Name, "Button") > 0 Then
            Shp.Width = Shp.Width * 1.5
            Shp.Height = Shp.Height * 1.5
        End If
    Next Shp
End Sub
```



예제 5: 조건에 따라 차트의 제목 업데이트하기

이 코드는 현재 시트에 있는 모든 차트를 순회하며, 차트 제목에 "Sales"가 포함된 경우 해당 제목을 "Updated Sales Data"로 변경합니다.

```vba
Sub Update_Sales_Charts()
    Dim Ch As ChartObject
    For Each Ch In ActiveSheet.ChartObjects
        If InStr(Ch.Chart.ChartTitle.Text, "Sales") > 0 Then
            Ch.Chart.ChartTitle.Text = "Updated Sales Data"
        End If
    Next Ch
End Sub
```



예제 6: 빈 셀 찾기 및 메시지 표시

이 코드는 범위 내의 셀을 순회하며, 빈 셀을 찾으면 메시지 박스를 표시하고, 그렇지 않으면 아무 작업도 하지 않습니다.

```vba
Sub Find_Empty_Cells()
    Dim Cell As Range
    For Each Cell In Range("C1:C10")
        If Cell.Value = "" Then
            MsgBox "빈 셀이 있습니다: " & Cell.Address
        End If
    Next Cell
End Sub
```


예제 7: 값이 특정 범위에 있는 셀 색상 변경

이 코드는 범위 내의 셀을 순회하며, 셀 값이 10에서 20 사이인 경우 셀의 배경색을 녹색으로 변경합니다.

```vba
Sub Highlight_Cells_In_Range()
    Dim Cell As Range
    For Each Cell In Range("D1:D10")
        If Cell.Value >= 10 And Cell.Value <= 20 Then
            Cell.Interior.Color = RGB(144, 238, 144) ' 연녹색
        End If
    Next Cell
End Sub
```



예제 8: 특정 파일 확장자를 가진 파일 찾기

이 코드는 지정된 폴더 내의 모든 파일을 순회하며, 파일 확장자가 ".xlsx"인 파일을 찾아 메시지 박스를 표시합니다.

```vba
Sub Find_Excel_Files()
    Dim File As String
    File = Dir("C:\YourFolder\*.*")
    
    Do While File <> ""
        If InStr(File, ".xlsx") > 0 Then
            MsgBox "엑셀 파일 발견: " & File
        End If
        File = Dir
    Loop
End Sub
```

결론


For Each 구문은 Excel VBA에서 반복 작업을 자동화하는 데 있어 필수적인 도구입니다. 이를 통해 반복적인 작업을 효율적으로 처리할 수 있으며, 코드 작성 과정에서 오류를 줄이고 유지보수를 용이하게 할 수 있습니다. 
더 많은 예제와 VBA 관련 팁을 원한다면, [마이크로소프트 공식 문서]를 참조하세요.

 

For Each...Next statement (VBA)

Office VBA reference topic

learn.microsoft.com

 

 

 

 

반응형

댓글