이전 글에서 반복문 For Next와 Do Loop에 대해 알아보았습니다. 이번에는 For Each... Next에 대해 알아보고자 합니다.
1. For Each... Next 반복문
For Each... Next 반복문은 이전 글에서 알아본 For Next 반복문에 Each가 추가된 형태로 지정한 반복 횟수만큼 반복하는 것이 아니라 컬렉션 내의 개체 또는 배열 내의 요소를 하나씩 접근하면서 명령을 실행하는 반복문입니다.
For Each... Next 반복문 사용방법은 다음과 같습니다.
Dim 개체변수 As 개체형식
For Each 개체변수 In 컬렉션
실행문
Next
For Each... Next 반복문에서 사용할 개체 변수를 개체 형식으로 선언하고 컬렉션 내의 개체를 개체 변수에 입력하고 실행문을 실행합니다. 컬렉션 내의 개체 모두 실행하면 종료됩니다.
2. 예제를 통해 알아보기
우선 엑셀 시트에 각 학생별 성적을 입력한 시트를 만들고 그 점수를 모을 시트를 하나 만듭니다.
학생들 점수를 모을 시트를 "성적"이라는 이름으로 [그림 1]과 같이 만듭니다.
B열에는 학생들 이름이 입력되고 C열에는 학생들 평균점수가 입력되도록 하려 합니다. 그리고, ActiveX 컨트롤의 명령 단추를 클릭하여 버튼 하나를 만들어 주었습니다.
각 학생 이름으로 시트를 만들고 시트 내에 [그림 2]와 같이 해당 학생의 점수를 입력합니다.
이제 "성적"시트에 만들어 놓은 버튼을 마우스로 더블 클릭합니다. 그러면 VBE 창이 열리며 버튼 클릭에 관한 Sub 프로시저가 생성됩니다. 만약 버튼이 마우스 더블 클릭이 되지 않는 경우에는 엑셀 메뉴 개발도구-컨트롤-디자인 모드가 선택되어 있는지 확인하시고 선택을 해제해 주시면 됩니다.
ActiveX 컨트롤 명령 단추 사용 방법은 아래 링크되어 있는 이전 글을 참조하시기 바랍니다.
VBA 개발 도구의 ActiveX 컨트롤을 사용하여 프로그래밍 하기 I
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
성적 시트에 만든 버튼을 마우스로 클릭하면 성적 시트에 학생 이름과 평균 점수가 입력됩니다.
'엑셀 > VBA' 카테고리의 다른 글
엑셀 VBA - Function 프로시저 인수 지정 없이 사용 (0) | 2021.09.27 |
---|---|
엑셀 VBA - Function 프로시저 (0) | 2021.09.26 |
엑셀 VBA Switch 함수 & Select Case에 대해 알아보기 (0) | 2021.09.24 |
엑셀 VBA IF문 다중 조건 처리 & IIF에 대해 알아보기 (0) | 2021.09.24 |
Excel VBA ReDim 사용하지 않고 동적 배열변수 & Type문 사용하기 (0) | 2021.09.21 |