엑셀(Excel) VAB - For Each 문을 이용하여 컬렉션개체 반복처리하기

엑셀(Excel)/VBA

엑셀(Excel) VAB - For Each 문을 이용하여 컬렉션개체 반복처리하기

 

환경 : Microsoft Excel 2010

 

For Each 문은 개체들중 집합을 나타내는 것들에 쓰이는데 배열형태로 되어있기 때문에 For Each 문을 사용해 끝날 때 까지 꺼내 쓸수가 있습니다. For 문은 숫자로 통제를 하지만 For Each 문은 컬렉션개체에 들어있는 것들을 다 꺼낼 때 까지 반복을 하게 되는 것입니다. 컬렉션 개체에서 하나씩 꺼낼 때 담을 변수는 컬렉션개체에 들어가 있는 데이터 형이어야 합니다.

 

문법은 다음과 같습니다. Next 다음에 개체명은 써도 되고 안써도 됩니다.

 

For Each 꺼내서 담을 변수 In 컬렉션개체

   실행문

Next [꺼내서 담은 변수]

 

아래 예제는 통합워크시트 컬렉션개체를 통해 현재 통합워크시트에 추가되어 있는 시트명들을 하나씩 띄워서 보여줄 것입니다. 소스를 보시면 Worksheets 의 컬렉션 개체에서 For Each 문을 사용하여 Worksheet 하나씩 꺼내는 것입니다.

 

Private Sub ForEachSample()

    Dim sheet As Worksheet

For Each sheet In Worksheets

        MsgBox "워크시트명 : " & sheet.Name

    Next

End Sub

 

그림과 같이 4개의 개체명을 메시지박스로 띄워지게 됩니다.

 

엑셀(Excel) VAB - For Each 문을 이용하여 컬렉션개체 반복처리하기

다음은 Application.InputBox 로 영역을 입력받아 1000 보다 작으면 빨간색으로 셀에 있는 숫자값을 변경하도록 해보겠습니다. 소스는 아래와 같습니다. Range 컬렉션 개체를 리턴받아 For Each 문을 사용하여 하나씩 꺼내면서 값이 1000 보다 작은지 체크한후

작다면 Font.Color 속성을 이용해 색깔을 빨간색으로 바꿉니다.

 

Private Sub RangeForEachSample()

   

    Dim returnSel As Range

   

    Set returnSel = Application.InputBox("원하는 영역에 값적용", "범위선택", Type:=8)

   

    For Each selData In returnSel

        If selData.Value <= 1000 Then

            selData.Font.Color = RGB(255, 0, 0)

        End If

    Next

End Sub

 

 

Posted by 녹두장군

댓글을 달아 주세요

  1. dkdkdk 2019.09.15 22:42  댓글주소  수정/삭제  댓글쓰기

    개인적으로 vba공부하는데 많은 도움이 되고 있습니다

    개념 관련해서 하나 질문 좀 드려도 될까 싶습니다.

    for each에 관해서는 이제 이해가 됩니다

    개체의 집합인 콜렉션이 있고 for처럼 반복하는데 그 개체 하나하나 적용하며

    반복한다는 의미로 이해가 됩니다.

    궁금한 건 range 개체들로 실험을 하고 있는데 범위에서 꼭 한 개의 셀 단위로만 움직여야 하는지 궁금합니다

    만약 10곱하기10 range가 있다면 for each 가 총 100번을 반복할텐데 for each뒤에 나오는 변수(하나하나씩 반복될 개체)의 사이즈같은게 변경 가능한지 싶습니다(1곱하기2로 만들어서 50번만 하게)

    10곱하기10 range 에 속하는 range 개체는 꼭 1곱하기1 사이즈인지...

    1곱하기2 셀마다 병합을 하고 싶은데 for each 구문으로 가능한지 궁금합니다.

    • Favicon of https://mainia.tistory.com 녹두장군 2019.09.16 21:51 신고  댓글주소  수정/삭제

      Sub step()
      For i = 0 To 10 Step 2
      ActiveCell.Offset(0, i).Select
      ActiveCell.Offset(0, i + 1).Select
      Next i
      End Sub

      반복문은 Step 을 이용해서 몇 칸씩 건너 뛸 수 있습니다. 위 소스를 응용해 보세요.