셀 하나를 클릭했는데 그 안에서 수백 번의 계산이 동시에 일어나고 있다면 믿어지는가. 앞선 글에서 다룬 SUMPRODUCT나 SUMIF의 조건 판정이 바로 그런 경우였다. 겉으로는 셀 하나에 결과값 하나만 보이지만, 그 이면에서는 범위 전체를 대상으로 한 계산이 통째로 진행되고 있었다. 이 글에서는 이 현상의 정체, 즉 배열수식이라는 개념을 원리 차원에서 짚어본다.
스칼라 연산과 배열 연산의 차이
평소 우리가 쓰는 대부분의 수식은 '스칼라 연산'이다. =A2+B2처럼 셀 하나와 셀 하나를 계산해서 값 하나를 내놓는 방식이다. 입력도 하나, 출력도 하나다.
반면 '배열 연산'은 여러 개의 값을 하나의 묶음(배열)으로 취급해서 한꺼번에 계산한다. =A2:A10+B2:B10이라고 쓰면, 이는 A2+B2, A3+B3, ... A10+B10이라는 아홉 번의 계산을 동시에 수행하라는 뜻이 된다. 입력은 여러 개(범위 대 범위)지만, 이 계산 결과를 최종적으로 어떻게 압축해서 보여줄지는 그 다음 문제다.
결과가 여러 개인데 셀은 하나뿐이라면?
여기서 배열수식의 진짜 개념이 드러난다. 아홉 번의 계산 결과 아홉 개의 값이 나왔는데, 이를 담을 셀이 하나뿐이라면 엑셀은 어떻게 해야 할까. 과거 방식에서는 이 아홉 개의 값을 SUM이나 COUNT 같은 함수로 다시 하나로 압축해서 보여주는 방식을 썼다. 예를 들어 {=SUM(A2:A10*B2:B10)}이라는 수식은 A와 B 각 행을 곱한 아홉 개의 결과를 배열로 만든 뒤, 그 아홉 개를 SUM으로 다시 하나로 합쳐 셀 하나에 담아내는 구조다. 여기서 중괄호 {}는 사용자가 직접 입력하는 기호가 아니라, 예전 엑셀에서 Ctrl+Shift+Enter를 눌러 "이건 배열수식입니다"라고 선언했을 때 엑셀이 자동으로 붙여주던 표시였다.
왜 예전에는 이런 특별한 입력이 필요했나
일반 함수는 셀 하나 대 셀 하나로 계산하도록 설계되어 있었기 때문에, 여러 값을 배열째로 넘기려면 엑셀에게 "지금은 평소와 다른 계산 방식으로 처리해달라"고 명시적으로 알려줘야 했다. 그 신호가 바로 Ctrl+Shift+Enter였다. 이 키 조합 없이 같은 수식을 입력하면, 엑셀은 배열 전체가 아니라 배열의 첫 번째 값만 계산에 사용해서 전혀 다른(대개는 틀린) 결과를 내놓곤 했다. 실무에서 배열수식이 어렵게 느껴졌던 가장 큰 이유가 바로 이 '눈에 보이지 않는 입력 방식의 차이'였다.
지금은 어떻게 달라졌나
최신 엑셀(Microsoft 365)에서는 이 과정이 대부분 자동화되었다. 동적 배열 기능 덕분에 =A2:A10*B2:B10처럼 배열끼리의 연산을 그냥 입력해도 Ctrl+Shift+Enter 없이 곧바로 여러 개의 결과가 필요한 만큼 셀에 펼쳐진다. FILTER, UNIQUE, SORT 같은 함수들도 모두 이 동적 배열 원리 위에서 동작한다. 다만 SUMPRODUCT처럼 원래부터 배열을 내장 처리하도록 설계된 함수는 예나 지금이나 특별한 조작 없이 잘 작동해왔다는 점도 함께 기억해두면 좋다.
Q. 지금도 Ctrl+Shift+Enter를 써야 하는 경우가 있나요?
최신 버전에서는 대부분 필요 없지만, 예전 버전과 호환되는 파일을 함께 쓰는 조직이라면 여전히 마주칠 수 있다. 그럴 때는 수식 끝에 중괄호가 자동으로 붙어 있는지 확인하면 배열수식 여부를 알 수 있다.
Q. 배열 연산은 계산 속도에 영향을 주나요?
범위가 매우 크거나 배열 연산이 여러 겹 중첩되면 일반 연산보다 느려질 수 있다. 필요한 범위만 정확히 지정해서 사용하는 것이 좋다.
마무리
배열수식은 결국 "여러 개의 계산을 하나의 묶음으로 처리한다"는 배열 연산의 개념이, 결과를 어떻게 셀에 담아낼지를 두고 만들어낸 방식이었다. 예전에는 이를 위해 Ctrl+Shift+Enter라는 별도의 신호가 필요했지만, 지금은 그 결과가 자동으로 여러 셀에 펼쳐지는 동적 배열 방식으로 자연스럽게 이어지고 있다. 다음 글에서는 바로 이 '결과가 여러 셀로 흘러넘친다'는 동적 배열(스필)의 개념이 왜, 어떻게 등장하게 되었는지 살펴본다.