조건 두세 개를 동시에 만족하는 값 계산하기 - SUMPRODUCT
'서울 지점이면서 1월'처럼 조건 두 개를 동시에 만족하는 값만 더하고 싶을 때 SUMIFS로도 충분히 가능합니다. 하지만 '서울 지점이거나 부산 지점'처럼 OR 조건이 섞이거나, 조건에 계산식이 들어가는 복잡한 상황에서는 SUMIFS만으로는 한계가 있습니다. 이럴 때 쓰는 함수가 SUMPRODUCT입니다.
1. SUMPRODUCT의 기본 원리
SUMPRODUCT는 원래 여러 배열을 각 자리끼리 곱한 뒤 모두 더하는 함수입니다. 그런데 조건식(예: A2:A6="서울")을 배열 자리에 넣으면, 조건을 만족하는 행은 1(TRUE), 만족하지 않는 행은 0(FALSE)으로 바뀝니다. 이 성질을 이용해서 여러 조건을 곱한 뒤 실제 값과 다시 곱하면, 조건을 모두 만족하는 행의 값만 살아남아 합산됩니다.
=SUMPRODUCT((조건1)*(조건2)*합산할범위)
위 예시에서 =SUMPRODUCT((A2:A6="서울")*(B2:B6="1월")*C2:C6)는 지점이 서울이면서 동시에 월이 1월인 행의 매출만 골라 더합니다. 조건에 맞지 않는 행은 곱셈 과정에서 0이 되어 자연스럽게 제외됩니다.
2. SUMIFS로도 되는데 왜 SUMPRODUCT를 쓸까
단순히 '조건1 AND 조건2'만 있다면 =SUMIFS(C2:C6,A2:A6,"서울",B2:B6,"1월")로 충분하고, 오히려 이쪽이 더 읽기 쉽습니다. SUMPRODUCT가 필요해지는 상황은 다음과 같습니다.
- OR 조건이 섞일 때 - '서울이거나 부산'처럼 조건 중 하나만 맞아도 되는 경우
- 조건에 계산식이 들어갈 때 - '매출이 평균 이상인 행'처럼 고정값이 아닌 조건
- 텍스트 부분일치 조건이 여러 겹일 때 - 와일드카드(*)와 다른 조건을 함께 걸어야 하는 경우
3. OR 조건 - 더하기(+)로 바꾸기
AND 조건은 곱하기(*)로, OR 조건은 더하기(+)로 표현합니다. '서울 또는 부산'이면서 '1월'인 매출을 합산하려면 다음과 같이 씁니다.
=SUMPRODUCT(((A2:A6="서울")+(A2:A6="부산"))*(B2:B6="1월")*C2:C6)
괄호 안에서 지점 조건 두 개를 더해 'OR'로 묶고, 그 결과를 월 조건과 다시 곱해 'AND'로 연결하는 구조입니다.
4. 조건에 계산식 넣기 - 평균 이상만 합산
고정된 값이 아니라 다른 계산 결과를 조건으로 쓸 수도 있습니다.
=SUMPRODUCT((C2:C6>AVERAGE(C2:C6))*C2:C6)
평균보다 큰 매출만 골라서 다시 합산하는 수식입니다. SUMIFS는 조건 자리에 이런 계산식을 직접 넣기가 까다로운데, SUMPRODUCT는 조건식 자리에 비교 연산자만 들어가면 되므로 자유도가 높습니다.
자주 막히는 지점 세 가지
1) 결과가 0으로만 나온다
증상: 분명 조건에 맞는 데이터가 있는데 합계가 0으로 나옵니다.
원인: 비교하는 텍스트에 보이지 않는 공백이 섞여 있거나, 범위의 행 개수가 서로 다른 경우가 흔합니다.
해결: 각 조건식만 따로 셀에 입력해 TRUE/FALSE가 예상대로 나오는지 하나씩 확인합니다. 필요하면 TRIM으로 공백을 제거한 값끼리 비교합니다.
2) AND와 OR을 섞었더니 괄호 위치 때문에 결과가 틀어진다
증상: OR로 묶은 조건이 의도와 다르게 다른 조건까지 함께 묶여 계산됩니다.
원인: 곱하기(*)와 더하기(+)가 섞일 때 괄호로 우선순위를 명확히 지정하지 않은 경우입니다.
해결: OR로 묶을 조건들을 먼저 괄호로 한 번 감싼 뒤, 그 결과를 다른 조건과 곱하는 순서로 괄호를 이중으로 씁니다.
3) 텍스트 범위와 숫자 범위 개수가 안 맞아 오류가 난다
증상: #VALUE! 오류가 뜨며 계산이 안 됩니다.
원인: 조건에 쓰인 범위(A2:A6 등)와 합산할 범위(C2:C6 등)의 행 개수가 서로 다른 경우입니다.
해결: 모든 범위의 시작 행과 끝 행 개수를 동일하게 맞춥니다.
자주 묻는 질문
SUMPRODUCT 대신 SUMIFS에 OR을 넣을 방법은 없나요?
SUMIFS 여러 개를 더하는 방식으로 우회할 수 있습니다. =SUMIFS(C:C,A:A,"서울",B:B,"1월")+SUMIFS(C:C,A:A,"부산",B:B,"1월")처럼 조건별로 나눠 더하면 됩니다. 다만 조건 조합이 많아질수록 수식이 길어져, 이런 경우 SUMPRODUCT 한 줄이 더 간결합니다.
COUNTIFS 대신 개수를 셀 때도 SUMPRODUCT를 쓸 수 있나요?
네, 마지막에 곱하는 값의 범위를 빼고 조건식만 곱하면 개수를 셀 수 있습니다. =SUMPRODUCT((A2:A6="서울")*(B2:B6="1월"))은 두 조건을 동시에 만족하는 행의 개수를 반환합니다.
SUMPRODUCT가 SUMIFS보다 느리다고 들었는데 사실인가요?
SUMPRODUCT는 지정한 범위 전체를 배열로 계산하기 때문에, 데이터가 매우 많거나(수십만 행 이상) 파일 전체에서 여러 번 반복 사용되면 SUMIFS보다 느려질 수 있습니다. 일반적인 업무 파일 규모에서는 차이가 크지 않으니, 조건이 단순하면 SUMIFS를, 복잡하면 SUMPRODUCT를 상황에 맞게 선택하시면 됩니다.
범위를 전체 열(A:A)로 지정해도 되나요?
SUMPRODUCT는 전체 열 참조 시 계산량이 크게 늘어 속도가 느려질 수 있습니다. 가능하면 실제 데이터가 있는 범위(A2:A1000 등)로 구체적으로 지정하는 것을 권장합니다.
정리
- SUMPRODUCT는 조건식을 TRUE(1)/FALSE(0)로 바꿔 곱하는 원리로 다중 조건 합산을 처리합니다.
- AND 조건은 곱하기(*), OR 조건은 더하기(+)로 표현합니다.
- 단순한 AND 조건이라면 SUMIFS가 더 읽기 쉬우므로, SUMPRODUCT는 OR 조건이나 계산식 조건이 필요할 때 사용합니다.
- 결과가 0이면 조건식을 하나씩 따로 확인해 공백이나 범위 개수 문제를 점검합니다.
- 전체 열 참조는 계산 속도를 떨어뜨릴 수 있어 실제 데이터 범위로 좁혀 쓰는 것이 안전합니다.
관련 글
- 거래처별 매출 집계, SUMIF 말고 피벗테이블로 하는 법
- 두 파일 대사, 눈으로 비교하지 말고 COUNTIF로 끝내기
- VLOOKUP이 왼쪽 열은 못 찾을 때, INDEX/MATCH로 해결하기
댓글
댓글 쓰기