• 최초 작성일: 2005-09-14
  • 최종 수정일: 2026-09-30
  • 조회수: 7 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 조건이 있는 n열마다 합계 구하기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

질문 하나

안녕하세요.

제목대로 2열 걸러 한 열씩의 합을 구하는건데요. 그 앞 열의 조건에 따라 틀려집니다. 예제를 올렸으니 도와주시면 감사하겠습니다.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

조건이 있는 n열마다 합계 구하기

핵심 요약: 조건부 n열 합계 사용자 정의 함수

일정한 간격으로 반복되는 열에서 조건에 맞는 값만 더해야 할 때, 내장 함수로 복잡하게 풀기보다 사용자 정의 함수를 만들면 훨씬 간단하고 효율적입니다.

  • 1단계: 조건 셀(rngX)과 검색 범위(rngXXX)를 인수로 받는 Function을 만듭니다.
  • 2단계: 범위의 각 셀이 조건 셀과 같으면 바로 오른쪽 셀 값을 더합니다.
  • 3단계: 합계를 함수 이름에 대입해 결과로 돌려줍니다.

Step 1: 어떤 질문이었을까요?

먼 소린지 말로는 상황 파악이 안되시지요? 그러실줄 알고 준비했습니다. 다음 버튼을 누르세요!

잘 보고 오셨나요? 이제 질문하신 분이 무엇을 하고 싶다는 것인지 이해가 되시리라 믿습니다.

Stage 시트에는 A형, B형 등의 종류를 나타내는 머리글이 B1, C1 셀에 있고, 오른쪽 D2:U2 영역에 '날짜, 종류, 개수' 세 칸이 한 묶음으로 반복해서 입력되어 있습니다. 예를 들어 종류가 A형인 개수를 모두 더하면 12, B형은 21이 되어야 합니다.

단순히 일정 열마다 합계를 구하는 경우라면 그냥 배열 수식을 사용하면 되겠습니다만, 이와 같이 n열마다 합계를 구하되 조건이 추가적으로 부과되는 경우라면 머리가 아파옵니다.

여러 가지 함수를 사용하여 갖은 기교를 다 부리면 어떻게 될 법도 합니다만, 그것보다는 이런 경우, 사용자 정의 함수를 만들어 사용하면 훨~씬 효율적입니다.

Stage 시트의 B2 셀에는 다음과 같은 수식이 입력되어 있습니다.

=mysum(B1,D2:U2)

'어라? 그냥 Sum도 아니고 앞에 my가 붙은 걸 보니… 나만을 위한 Sum 함수라는 뜻인가?'

하시겠지요. 맞습니다! 그런 의미로 이름붙인 사용자 정의 함수입니다.

Step 2: 코드 살펴보기

함수의 내용을 살펴보면 다음과 같습니다. 허탈할 정도로 간단하군요.

Function MySum(rngX As Range, rngXXX As Range) As Long

    Dim rngCell As Range
    Dim lngSum As Long

    For Each rngCell In rngXXX
        If rngCell = rngX Then
            lngSum = lngSum + rngCell.Offset(0, 1)
        End If
    Next rngCell

    MySum = lngSum

End Function

rngX는 B1 셀, rngXXX는 각 날짜별 종류(A, B, C)와 개수 데이터가 들어있는 영역을 지정한 다음, rngXXX의 각 셀을 순차적으로 돌면서 rngX, 즉 B1 셀에 입력된 값이 같은지를 비교하여, 같은 경우에만 그 옆셀(rngCell.Offset(0,1) 셀에 입력된 값을 계속 더한 다음 MySum 함수의 결과값으로 되돌려주는 사용자 정의 함수입니다.

오늘 설명드린 내용은 VBA에 입문하신 분들을 위한 것이라 할 수 있겠습니다. 문제에 대한 접근 방법 및 사용자 정의 함수의 기본적인 사용 패턴(위 코드 상자 안에 들어있는 내용)을 완전히 내 것으로 만드시기 바랍니다.

오늘은 짧게 여기까지…

정리 — MySum 함수 코드 핵심

구분 사용한 코드 역할
함수 선언 Function MySum(rngX, rngXXX) 조건 셀과 검색 범위를 인수로 받음
범위 순환 For Each rngCell In rngXXX 검색 범위의 모든 셀 확인
조건 비교 If rngCell = rngX 종류가 같은 셀만 선택
합계 누적 lngSum + rngCell.Offset(0, 1) 바로 옆의 개수를 더함
결과 반환 MySum = lngSum 합계를 함수 결과로 돌려줌

자주 묻는 질문 (FAQ)

Q1. 단순히 n열마다 합계를 구하는 경우에는 어떻게 하나요?

조건이 없이 일정한 열마다 합계만 구한다면 배열 수식으로 해결할 수 있습니다. 이번 강좌처럼 조건이 추가되면 수식이 복잡해지므로 사용자 정의 함수가 더 편리합니다.

Q2. 사용자 정의 함수는 어디에 만들어야 하나요?

VB Editor에서 일반 모듈을 삽입하고 Function 프로시저로 작성합니다. 그러면 워크시트에서 =MySum(B1,D2:U2)처럼 내장 함수와 똑같이 사용할 수 있습니다.

Q3. 함수 이름 앞에 My를 붙인 이유는 무엇인가요?

엑셀의 내장 함수 Sum과 구분하기 위해 '나만을 위한 Sum 함수'라는 뜻으로 붙인 이름입니다. 사용자 정의 함수 이름은 내장 함수와 겹치지 않게 짓는 것이 좋습니다.

마치며

문제에 대한 접근 방법과 사용자 정의 함수의 기본 패턴을 완전히 내 것으로 만들어 두면 다양한 상황에 응용할 수 있습니다.