본문 바로가기

엑셀/VBA

엑셀 VBA 반복문 For Each...Next문 사용하기

반응형

이전 글에서 반복문 For Next와 Do Loop에 대해 알아보았습니다. 이번에는 For Each... Next에 대해 알아보고자 합니다. 

 

VBA 반복문 For Next에 대해 알아보자

 

VBA 반복문 For Next에 대해 알아보자

VBA의 반복문에 대해 알아보고자 합니다. 먼저 For Next 구문에 대해 알아보며 사용방법과 예제를 통해 자세히 알아보겠습니다. 반복문은 정해진 실행문이 지정한 조건을 만족하면 반복해서 실행

mr-johndoe.tistory.com

 

VBA 반복문 Do Loop에 대해 알아보자

 

VBA 반복문 Do Loop에 대해 알아보자

For Next 반복문의 경우에는 반복 횟수를 이미 알고 있는 상태에서 반복문 처리를 하지만 반복 횟수를 모르는 경우에는 Do Loop 반복문을 이용하여 반복문 처리를 할 수 있습니다. Do Loop 반복문은 Whi

mr-johndoe.tistory.com

 

 

 

 

1. For Each... Next 반복문

For Each... Next 반복문은 이전 글에서 알아본 For Next 반복문에 Each가 추가된 형태로 지정한 반복 횟수만큼 반복하는 것이 아니라 컬렉션 내의 개체 또는 배열 내의 요소를 하나씩 접근하면서 명령을 실행하는 반복문입니다.

 

For Each... Next 반복문 사용방법은 다음과 같습니다.

 

     Dim 개체변수 As 개체형식

 

     For Each 개체변수 In 컬렉션

           실행문

     Next

 

For Each... Next 반복문에서 사용할 개체 변수를 개체 형식으로 선언하고 컬렉션 내의 개체를 개체 변수에 입력하고 실행문을 실행합니다. 컬렉션 내의 개체 모두 실행하면 종료됩니다.

 

2. 예제를 통해 알아보기

 우선 엑셀 시트에 각 학생별 성적을 입력한 시트를 만들고 그 점수를 모을 시트를 하나 만듭니다.

 

학생들 점수를 모을 시트를 "성적"이라는 이름으로 [그림 1]과 같이 만듭니다.

 

For_Each_Next_예제_성적_시트
[그림 1] 성적 시트

B열에는 학생들 이름이 입력되고 C열에는 학생들 평균점수가 입력되도록 하려 합니다. 그리고, ActiveX 컨트롤의 명령 단추를 클릭하여 버튼 하나를 만들어 주었습니다. 

 

학생_과목_평균_점수
[그림 2] 학생 과목 점수 및 평균 점수

각 학생 이름으로 시트를 만들고 시트 내에 [그림 2]와 같이 해당 학생의 점수를 입력합니다.

 

 

 

이제 "성적"시트에 만들어 놓은 버튼을 마우스로 더블 클릭합니다. 그러면 VBE 창이 열리며 버튼 클릭에 관한 Sub 프로시저가 생성됩니다. 만약 버튼이 마우스 더블 클릭이 되지 않는 경우에는 엑셀 메뉴 개발도구-컨트롤-디자인 모드가 선택되어 있는지 확인하시고 선택을 해제해 주시면 됩니다.

 

ActiveX 컨트롤 명령 단추 사용 방법은 아래 링크되어 있는 이전 글을 참조하시기 바랍니다.

 

VBA 개발 도구의 ActiveX 컨트롤을 사용하여 프로그래밍 하기 I

 

VBA 개발 도구의 ActiveX 컨트롤을 사용하여 프로그래밍 하기 I

엑셀 메뉴에서 개발도구-컨트롤-삽입을 클릭하면 양식 컨트롤과 ActiveX 컨트롤 두 가지의 메뉴를 보실 수 있습니다. 양식 컨트롤의 경우는 VBA 프로그래밍 없이 사용할 수 있는 컨트롤이지만 Active

mr-johndoe.tistory.com

 

VBE창에 다음과 같이 코딩을 합니다.

 

   Private Sub CommandButton1_Click()
       Dim WS As Worksheet  //워크시트 형식의 개체 변수 WS 선언
       Dim row As Integer
    
      row = 3
    
       For Each WS In Worksheets   //워크시트 개체를 하나씩 확인
    
           If WS.Name <> "성적" Then   
               Range("B" & row).Value = WS.Name

                          //이름이 성적인 워크시트의 B열에 워크시트 이름 입력
               Range("C" & row).Value = WS.Range("C2").Value

                         //이름이 성적인 워크시트의 B열에 워크시트 이름 입력
               row = row + 1
           End If
       Next
    
   End Sub

 

성적 시트에 만든 버튼을 마우스로 클릭하면 성적 시트에 학생 이름과 평균 점수가 입력됩니다.

 

For_Each_Next_예제_실행_결과
[그림 3] For Each Next 예제 실행 결과

 

반응형