For Each 문은 데이터를 반복해서 처리할 필요가 있을 때 사용하는 구문입니다. For Each 문과 함께 특정 영역의 셀을 병합하고 값을 합치는 예제를 만들어 보겠습니다. 실행할 매크로 함수는 버튼과 연결해서 클릭과 함께 실행되도록 만들어 보겠습니다.
◎ 매크로 함수 실행 버튼 만들기 |
▼ 버튼은 작성해 놓은 매크로 함수를 실행하는데 쓰입니다. 함수는 시트의 특정 영역에 값을 모두 합친 후 영역을 병합하고 결과값을 출력합니다. 먼저 시트에 버튼을 추가하기 위해 개발도구 > 삽입 > 양식 컨트롤 이동해서 단추를 클릭해서 드래그합니다.
▼ 단추 컨트롤을 시트에 추가하면 아래 그림과 같은 매크로 지정 대화상자가 뜹니다. “매크로 이름” 란에 함수명을 넣고 오른쪽 새로 만들기 버튼을 클릭합니다.
▼ 다음 VBA 작성창이 뜨면서 새로 만들어진 함수를 볼 수 있습니다. 이제 Sub ~ End Sub 사이에 코드를 작성해야 합니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 반복문 For Next, For Each Next 사용하기 ▶ 엑셀 VBA 영역에서 빈 셀, 행 열 삭제하기 ▶ 엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 ▶ 엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하기 ▶ 엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기 |
◎ 셀 영역 합계 함수 만들기 |
▼ 매크로 함수에 추가할 첫 번째 코드는 변수 선언과 합계를 구할 영역을 가져오는 부분입니다. Range 함수를 이용해서 rg 변수에 담습니다.
Dim rg As Range
Dim sumData As Integer
Set rg = ActiveSheet.Range("B2:B6")
▼ 다음은 For Each 반복문을 사용해서 rg 변수에 담긴 영역의 숫자값을 하나씩 꺼내 합계를 구합니다. IsNumberic 는 셀 데이터의 숫자 여부를 판단해서 True/False 로 반환하는 함수입니다. IF 구문과 함께 사용해서 숫자가 아닌 경우 걸러 냅니다. 합계를 구할 때 오류를 방지하기 위한 코드입니다.
For Each selData In rg
If IsNumeric(selData) Then
sumData = sumData + selData.Value
End If
Next
▼ 영역에 대한 병합은 Merge 함수를 이용합니다. 병합된 셀에는 바로 위에서 구한 합계값인 sumData 를 추가합니다.
With rg
.Merge
.Value = sumData
End With
▼ 함수의 전체 내용은 다음과 같습니다.
Sub 합계_Click()
Dim rg As Range
Dim sumData As Integer
Set rg = ActiveSheet.Range("B2:B6")
For Each selData In rg
If IsNumeric(selData) Then
sumData = sumData + selData.Value
End If
Next
With rg
.Merge
.Value = sumData
End With
Application.DisplayAlerts = True
End Sub
▼ 매크로 실행을 위해 버튼을 클릭하면 그림과 같은 병합 경고 창을 뜰 겁니다. 확인 버튼을 눌러 경고를 무시하고 작업을 진행합니다.
▼ 결과는 다음과 같습니다. 기존에 있던 값은 모두 사라지고 병합된 영역에 합계값이 추가가 되었습니다.
※ 아래는 참고하면 좋을 만한 글들의 링크를 모아둔 것입니다. ※ ▶ 엑셀 VBA 반복문 For Next, For Each Next 사용하기 ▶ 엑셀 VBA 영역에서 빈 셀, 행 열 삭제하기 ▶ 엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 ▶ 엑셀 VBA 반복문으로 여러 컨트롤 한번에 제어하기 ▶ 엑셀 VBA 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기 |
'엑셀(Excel) > VBA' 카테고리의 다른 글
엑셀 VBA 차트 매크로로 만드는 방법 (3) | 2024.07.03 |
---|---|
엑셀 VBA 주민번호, 이메일 문자열 잘라 내는 방법 (8) | 2024.07.01 |
엑셀 VBA 값 숫자 여부 판단하는 IsNumberic 함수 사용하기 (2) | 2024.06.29 |
엑셀 VBA 리스트 박스(ListBox) 사용하기 (0) | 2024.06.29 |
엑셀 VBA 영역(Range)을 배열(Array) 로 변경하기 (5) | 2024.06.15 |
엑셀 VBA 데이터 분리해서 다른 시트에 붙여 넣기 (3) | 2024.06.13 |
엑셀 VBA 웹브라우저(인터넷 익스플로러) 띄우는 방법 (0) | 2024.06.12 |
엑셀 VBA 통합 문서 문서가 열리는 순간 기능 구현하기 (0) | 2024.06.05 |