본문 바로가기
지난 게시글

[엑셀] VBA 셀병합된 영역의 합계 구하는 방법

by yyDandy 2024. 1. 8.
반응형

안녕하세요. yyDandy입니다. 사무실 칼퇴보장 알잘딱깔센 엑셀 활용법! 

 


셀 병합된 영역의 합계

엑셀을 하다보면 편하게 보기 위해 병합을 하기도 하는데요.  아래와 같은 상황에서 합계를 구하려면 여러 방법이 있겠지만, 생각보다 귀찮음이 느껴질 수 밖에 없는데요. Sumif를 쓰더라도 A3의 셀이 포함되지 않고. 여러번의 반복작업을 해야 하기 때문이죠. 인수의 값이 몇 개 없다면 사실 손으로 하는 게 빠를 수도 있지만 값이 변화하는 상황에서 자주해야 하는 작업이거나 데이터 양이 방대할 때는 자동화 시킬 필요가 있습니다. 오늘 한 번 알아볼게요.

 

반응형

코드


Public Sub 병합된셀합계구하기()
Dim r As Long
Dim cntArea As Long

r = 2
Do
    Cells(Rows.Count, "D").End(3)(2) = Cells(r, 1)
    If Cells(r, 1).MergeCells Then
        cntArea = Cells(r, 1).MergeArea.Cells.Count
        Cells(Rows.Count, "E").End(3)(2) = Application.Sum(Cells(r, 1).Offset(, 1).Resize(cntArea))
        r = r + cntArea - 1
       
    Else
        Cells(Rows.Count, "E").End(3)(2) = Cells(r, 2)
        
    End If
    
r = r + 1
Loop Until IsEmpty(Cells(r, 2))

End Sub

 

 

D나 E의 범위를 달리하면 원하는 곳에 값을 위치시킬 수 있고, A, B를 달리하면 병합셀이 있는 부분을 바꿀 수 있습니다. 위 코드를 이해하기 전에 Cells(Rows.Count,"E").End(3)(2)의 이해가 선행되어야 하기 때문에 아래 글을 읽어보신 후 해설을 읽으시면 도움이 됩니다!

 

2024.01.07 - [엑셀] - [엑셀] VBA 셀 끝까지 선택하기, Cells(Rows.Count, "A")

 

[엑셀] VBA 셀 끝까지 선택하기, Cells(Rows.Count, "A")

안녕하세요. yyDandy입니다. 사무실 칼퇴보장 알잘딱깔센 엑셀 활용법! Cells 이해 오늘은 Cells(Rows.Count, "A")에 대해 알려드릴게요. VBA를 사용할 때 가장 중요한 것은 영역 선택이죠. 그래서 Cells을 많

yydandy.tistory.com

 

해설

위 코드를 부분 별로 설명해드릴게요.

 

먼저 맨 위 변수선언 부분입니다. 이곳은 데이터를 보관하는 용도라고 생각하시면 편할 거 같아요. 실제로 r 과 cntArea의 이름을 원하는 것으로 바꿔도 상관 없어요.

 

 

이 부분이 실제로 함수를 가동시키는 부분입니다. 제일 먼저 r=2라는 것은 시작 행이 2부터 시작하기 때문입니다. 1은 head, 즉 제목 행이 있기 때문에 2부터 시작이고, 혹시라도 제목이 2줄 이상으로 이루어져 있다면 시작하는 부분을 바꿔주면 된답니다. 예를 들어, 3행부터 데이터 셀이라면 r =3이 되겠죠?

 

다음으로 중요한 부분은 If 문인데요. Cells(r,1) -> 2,1 지점 A열의 2행 지점에서 MergeCells 병합이 되어 있다면 해당 영역의 셀 개수를 cntArea에 값을 저장하는 문입니다. 제 예시에서는 C는 병합이 안되어 있기 때문에 cntArea는 1의 값이 저장이 되겠죠. 그 다음은 E행에 데이터를 입력하는 건데요. 그 값은 Sum(Cells(r, 1).Offset(, 1) 의 값을 입력합니다. Offset(,1)은 상대좌표로 Cells(r,1) 지점에서 오른쪽으로 1칸 이동한 값, 즉 B열을 의미합니다. B열에서 아까 cntArea의 저장된 값 만큼 위로 가면서 Sum을 해주는 것인데요. 요약하자면 B열의 제일 아래서 1개의 행의 합을 구해주고 있습니다. 만약 cntArea가 2였다면 B열에서 2개의 값을 순서대로 Sum 해주는 값이 나왔을 거에요.

 

그 아래에서는 행을 1개씩 더 하면서 B열이 끝나는 지점에서 순환문이 종료되게 됩니다.


더 많은 글을 보고 싶다면 아래 링크를 눌러주세요! 

https://yydandy.tistory.com/category/%EC%B7%A8%EB%AF%B8/%EC%97%91%EC%85%80

 

'취미/엑셀' 카테고리의 글 목록

일상, 맛집, 공부 등 내 삶을 기록해보자.

yydandy.tistory.com

 

반응형