Please Enable JavaScript!
Gon[ Enable JavaScript ]

엑셀 VBA For Each 반복문 이용해서 셀 영역 병합 및 합계 구하기

엑셀(Excel)/VBA
반응형

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 반복문을 이용해서 폼에 있는 전체 컨트롤 제어하기
반응형
Posted by 녹두장군1
,