안녕하세요. 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
'지난 게시글' 카테고리의 다른 글
[정책브리핑] 돈이 필요할 때, 서민금융진흥원 '소액생계비대출' (1) | 2024.01.08 |
---|---|
[정책브리핑] 희망적금 만기해지금 어떻게 쓸까? 청년도약계좌에 일시납입 가능! A-Z까지! (1) | 2024.01.08 |
[엑셀] VBA 특정한 셀, 범위 선택하는 법 ActiveSheet.UsedRange (0) | 2024.01.07 |
[엑셀] VBA 데이터 있는 열만 선택하기, Columns("A").SpecialCells(2) (2) | 2024.01.07 |
[엑셀] VBA 셀 끝까지 선택하기, Cells(Rows.Count, "A") (0) | 2024.01.07 |