기본 콘텐츠로 건너뛰기

[엑셀]SUMPRODUCT의 원리 — 배열 곱셈으로 조건을 표현하는 방법 조건을 0/1 배열로 바꿔 곱하는 논리

 재고 담당자 A씨는 "카테고리가 가전이거나 문구인 상품 중, 재고가 10개 미만인 것들의 총 재고 금액"을 구해야 했다. SUMIFS로 시도해봤지만 '이거나(OR)' 조건이 걸리는 순간 수식이 꼬이기 시작했다. 이럴 때 등장하는 함수가 SUMPRODUCT다. 이름 그대로 '곱한 것들의 합(sum of products)'인데, 이 단순한 이름 안에 조건부 집계 함수들과는 결이 다른 발상이 숨어 있다.

SUMPRODUCT는 원래 무엇을 위한 함수였나

SUMPRODUCT의 원래 용도는 사실 단순하다. 두 개 이상의 배열을 같은 위치끼리 곱한 뒤 그 결과를 모두 더하는 것이다.

=SUMPRODUCT(A2:A5, B2:B5)

A열이 수량, B열이 단가라면 이 수식은 (A2×B2)+(A3×B3)+(A4×B4)+(A5×B5), 즉 각 행의 금액을 계산해 모두 더한 총 판매금액을 한 번에 구해준다. 여기까지는 조건과 아무 상관이 없다. 그런데 이 '배열끼리 곱해서 더한다'는 성질이, 조건을 표현하는 데도 그대로 활용될 수 있다는 점이 SUMPRODUCT를 특별하게 만든다.

핵심 원리 — 조건을 0과 1로 바꿔서 곱하기

엑셀에서 (A2:A100="가전")처럼 범위와 조건을 비교하면, 그 결과는 TRUE 또는 FALSE로 이루어진 배열이 된다. 그리고 엑셀 내부에서 TRUE는 1로, FALSE는 0으로 계산에 참여한다. 즉 조건 하나를 '만족하면 1, 아니면 0'인 숫자 배열로 바꿀 수 있다는 뜻이다. SUMPRODUCT는 바로 이 성질을 이용해, 조건 배열과 금액 배열을 곱하는 방식으로 조건부 합계를 만들어낸다.

행카테고리="가전"재고<10두 조건 곱(AND)재고금액곱해서 더할 값
11 (참)1 (참)150,00050,000
21 (참)0 (거짓)030,0000
30 (거짓)1 (참)020,0000

이 표처럼 각 조건을 0/1 배열로 만든 뒤 서로 곱하면, 두 조건을 모두 만족하는 행만 1이 남고 나머지는 0이 되어 자동으로 걸러진다. 이 0/1 배열을 다시 금액 배열과 곱해서 더하면 조건에 맞는 행의 금액만 합산된다.

=SUMPRODUCT((B2:B100="가전")*(C2:C100<10)*D2:D100)

SUMIFS로는 안 되는 OR 조건도 표현할 수 있다

A씨가 막혔던 '가전이거나 문구'라는 OR 조건은 덧셈으로 표현하면 된다. 조건을 곱하면 AND, 더하면 OR이 된다는 원리다.

=SUMPRODUCT(((B2:B100="가전")+(B2:B100="문구"))*(C2:C100<10)*D2:D100)

여기서 (B2:B100="가전")+(B2:B100="문구") 부분은 둘 중 하나만 만족해도 1 이상이 되므로, 사실상 OR 조건 역할을 한다. SUMIFS가 조건들 사이에 AND만 지원하는 것과 달리, SUMPRODUCT는 곱셈과 덧셈을 자유롭게 섞어 AND와 OR을 원하는 대로 조합할 수 있다는 점이 가장 큰 차이다.

SUMPRODUCT vs SUMIFS, 언제 SUMPRODUCT를 써야 할까

조건이 모두 AND로만 연결되는 단순한 상황이라면 SUMIFS가 더 짧고 읽기 쉬우므로 그대로 쓰는 것이 낫다. 반면 OR 조건이 섞여 있거나, 다른 시트의 값을 계산에 함께 곱해야 하거나, 텍스트 길이·특정 문자 포함 여부처럼 SUMIFS의 조건 문법으로는 표현하기 까다로운 복잡한 조건이 필요할 때 SUMPRODUCT가 진가를 발휘한다.

주의할 점

SUMPRODUCT에 넣는 배열들은 반드시 크기(행·열 개수)가 서로 같아야 한다. 크기가 다르면 #VALUE! 오류가 발생한다. 또한 조건 배열 안에 텍스트가 섞여 있는 열 전체(예: B:B처럼 끝을 열지 않은 참조)를 그대로 넣으면 연산 속도가 느려질 수 있어, 실제 데이터가 있는 범위로 한정해서 참조하는 것이 좋다.

Q. SUMPRODUCT는 배열수식이라 Ctrl+Shift+Enter를 눌러야 하나요?

아니다. SUMPRODUCT는 함수 자체가 배열 연산을 내장하고 있어서 일반 Enter만으로도 정상 작동한다. 이 점이 SUMPRODUCT가 널리 쓰이는 이유 중 하나다.

Q. 조건을 세 개, 네 개로 늘려도 되나요?

가능하다. 곱하는 조건 배열의 개수에는 실질적인 제한이 없으므로 필요한 만큼 곱해서 연결하면 된다.

Q. SUMPRODUCT로 개수만 세는 것도 가능한가요?

가능하다. 금액 배열을 곱하지 않고 조건 배열들만 곱해서 더하면, 조건을 모두 만족하는 행의 개수를 세는 용도로도 쓸 수 있다.

마무리

SUMPRODUCT의 핵심은 결국 "조건을 0과 1의 숫자로 바꾸면 곱셈과 덧셈만으로 AND와 OR을 표현할 수 있다"는 발상이다. 다음 글에서는 이 0/1 배열이라는 개념을 한 단계 더 확장해서, 하나의 셀 안에 여러 계산이 동시에 담기는 배열수식 자체의 원리를 다뤄본다.

이 블로그의 인기 게시물

[엑셀]엑셀 날짜는 사실 숫자다 — 1900년부터 세어온 일련번호의 정체

 날짜가 적힌 셀에 그냥 1을 더하면 무슨 일이 벌어질까? 신기하게도 결과는 정확히 '다음 날 날짜'가 된다. 문자처럼 보이는 날짜에 어떻게 숫자를 더했는데 날짜가 하루 늘어날 수 있을까. 답은 간단하다. 엑셀에서 날짜는 애초에 문자가 아니라 숫자이기 때문이다. 날짜가 숫자로 저장된다는 사실 확인하기 날짜가 입력된 셀의 서식을 '일반'으로 바꿔보면 그 정체가 바로 드러난다. 2026-01-15라고 표시되던 셀이 갑자기 46037 같은 숫자로 바뀐다. 이 숫자가 바로 엑셀이 내부적으로 이 날짜를 저장하고 있는 실제 값, 즉 시리얼 넘버(일련번호)다. 화면에 "2026-01-15"라고 보이는 것은 앞서 TEXT 함수 편에서 다룬 것처럼, 이 숫자 위에 날짜 서식이라는 표시 규칙이 덧씌워진 결과일 뿐이다. 1900년을 기준으로 세는 시리얼 넘버 시스템 엑셀은(윈도우 버전 기준) 1900년 1월 1일을 시리얼 넘버 1로 정하고, 그날부터 하루가 지날 때마다 숫자를 1씩 늘려가는 방식으로 날짜를 표현한다. 46037이라는 숫자는 곧 "1900년 1월 1일로부터 46,037번째 되는 날"이라는 뜻이다. 날짜에 숫자를 더하거나 빼는 계산이 자연스럽게 되는 이유가 바로 여기에 있다. 날짜끼리의 덧셈·뺄셈은 사실 이 일련번호끼리의 평범한 산술 연산일 뿐이다. =DATE(2026,1,15) + 30 이 수식은 2026년 1월 15일의 시리얼 넘버에 30을 더한 것과 같으므로, 결과는 정확히 30일 뒤의 날짜인 2026년 2월 14일이 된다. 시간은 어떻게 표현될까 — 소수점 이하가 하루의 몇 분의 몇인지 날짜가 정수로 표현된다면, 시간은 그 정수의 소수점 이하 부분으로 표현된다. 하루 24시간을 1로 놓았을 때, 낮 12시는 하루의 정확히 절반이므로 0.5가 된다. 예를 들어 46037.5라는 값은 "2026년 1월 15일 낮 12시"를 의미한다. 날짜와 시간이 함께 입력된 셀을 다룰 때 정수 부...

[엑셀]COUNTIF/COUNTIFS — 카운팅과 조건 매칭의 관계 SUMIF와의 구조적 유사성과 차이

 출석부를 관리하다 보면 "결석이 3회 이상인 학생 수"나 "이번 달 지각 횟수"처럼 특정 조건을 만족하는 항목이 '몇 개'인지 세야 하는 순간이 자주 온다. 앞선 글에서 다룬 SUMIF가 조건에 맞는 값들을 '더하는' 함수였다면, 이번에 다룰 COUNTIF는 조건에 맞는 항목이 '몇 개'인지를 세는 함수다. 이름도 구조도 SUMIF와 매우 닮았지만, 자세히 들여다보면 미묘하지만 중요한 차이가 하나 숨어 있다. COUNTIF의 기본 구조 =COUNTIF(A2:A100, "결석") COUNTIF는 조건을 검사할 범위와 조건, 이렇게 두 개의 인수만 받는다. A2:A100 범위에서 "결석"이라는 값과 일치하는 셀이 몇 개인지를 세어 그 개수를 반환한다. SUMIF와 COUNTIF의 구조적 유사성 지난 글에서 SUMIF의 원리를 "조건 범위를 참/거짓 배열로 바꾸고, 그 배열을 합계 범위 위에 겹쳐서 참인 위치만 더한다"고 설명했다. COUNTIF도 앞부분까지는 완전히 동일하다. 조건 범위를 검사해서 참/거짓 배열을 만드는 과정까지는 똑같다. 차이는 그다음이다. SUMIF는 이 배열을 다른 범위(합계 범위) 에 겹쳐서 값을 더하지만, COUNTIF는 겹칠 다른 범위 자체가 필요 없다. 그냥 참/거짓 배열에서 TRUE의 개수만 세면 끝나기 때문이다. 즉 "무엇을 더할지"를 지정할 필요가 없으므로 인수가 하나 줄어드는 것이다. 이렇게 보면 COUNTIF(범위, 조건)는 개념적으로 SUMIF(범위, 조건, 참거짓배열자체) 와 비슷한 일을 하는 셈이다. COUNTIFS — 여러 조건의 동시 만족 =COUNTIFS(A2:A100, "결석", B2:B100, ">=3") COUNTIFS 역시 SUMIFS와 동일한 방식으로 확장된다. 각 조건 범위마다 참/거짓 배열을 만들고, 이 배열들을...

[엑셀]LEFT·RIGHT·MID의 공통점 — 텍스트는 결국 문자들의 배열이다

 "010-1234-5678"이라는 전화번호에서 가운데 네 자리만 뽑아내고 싶을 때, 많은 사람이 LEFT나 RIGHT는 익숙하게 쓰면서도 MID는 어렵게 느낀다. 그런데 이 세 함수는 사실 하나의 동일한 원리 위에서 동작한다. 텍스트를 하나의 덩어리가 아니라, 문자 하나하나가 순서대로 나열된 '배열'로 바라보는 관점이다. 텍스트를 문자 단위 배열로 보는 관점 "엑셀"이라는 두 글자 텍스트는, 배열의 눈으로 보면 1번째 자리에 "엑", 2번째 자리에 "셀"이 들어 있는 구조와 다르지 않다. 앞서 여러 글에서 다룬 배열이 셀들의 모음이었다면, 문자열 함수에서의 배열은 '문자들의 모음'이라는 점만 다를 뿐 "위치를 기준으로 원하는 부분만 골라낸다"는 발상 자체는 동일하다. LEFT·RIGHT·MID가 공유하는 하나의 원리 =LEFT("010-1234-5678", 3) → "010" =RIGHT("010-1234-5678", 4) → "5678" =MID("010-1234-5678", 5, 4) → "1234" 세 함수 모두 "어디서부터, 몇 글자를" 가져올지를 지정한다는 점에서 본질적으로 같은 함수다. LEFT는 항상 1번째 자리부터 시작한다고 고정해둔 것이고, RIGHT는 항상 끝에서부터 거꾸로 센 것이며, MID는 시작 위치를 자유롭게 지정할 수 있도록 일반화한 버전이다. 즉 LEFT와 RIGHT는 MID의 특수한 경우라고 볼 수 있다. MID로 문자 단위 추출을 직접 확인해보기 이 원리를 직접 확인해보는 가장 좋은 방법은 MID로 한 글자씩 뽑아보는 것이다. =MID("엑셀",1,1) → "엑" (1번째 자리 문자 1개) =MID("엑셀",2,1) → ...