배열함수의 가장 큰 단점은 속도이다. 배열함수를 많이 쓰면 셀계산 시 엄청난 속도를 불러온다. 당연한 얘기이겠지만 속도는 대상영역이 길수록, 배열함수가 많을수록 느려진다. 속도가 얼마나 느려지겠나 싶지만, 실무에선 날짜별 데이터가 많다. 날짜가 길어지면서 데이터가 많아지면 처음엔 빠르게 동작하던 배열함수도 점점 느려진다. 예를 들어보겠다. 쇼핑몰을 생각해보자.

[판매내역 시트]는 상품 판매가 일어날 때마다 한 줄씩 쌓이는 시트이다. 판매 정보는 날짜/대분류/중분류/상품명/수량/단가/금액이다. [날짜,분류별 현황 시트]는 날짜별 대분류별 판매액의 합계가 계산되는 시트이다. 첫번째 열에는 날짜가 있고, 열 제목은 대분류의 값들이 들어있다. 예제에선 가방, 의류, 악세서리이다.

[날짜,분류별 현황 시트]에서 배열함수를 사용하게 된다. 보통 다른 시트에서 사용하기 때문에 수식에 열 이름만 적는다.

=SUM(IF(($A:$A=$A17)*($B:$B=B$16),$G:$G))

위 수식을 끌어 채우면 모든 셀에 알맞은 값이 들어가게 된다. 배열 함수는 함수 하나 당 [판매내역 시트]를 처음부터 끝까지 검사한다. 각 행별로 조건에 맞는 행을 찾기 위해서다. 문제는 이제부터 시작한다. [판매내역 시트]는 데이터가 쌓이는 속도가 아주 빠르다. (쇼핑몰이 잘 된다고 생각하니 엑셀 수식 느린 것 쯤이야 아무것도 아닐지도..) [판매내역 시트] 에 데이터 하나 추가할 때마다 셀계산을 하게 되고 날짜수 * 대분류 항목수 만큼의 행 검사를 하게 된다. 좀 더 구체적으로 얘기하면 [판매내역 시트]에 7,000 개의 데이터가 있고, 대분류는 6종류, 300일 동안 사용한 엑셀파일이라면 7,000 * 6 * 300 = 12,600,000 번의 행 검사가 일어난다. [판매내역 시트]에 데이터를 입력 할 때마다 계산이 일어난다. 정말 시간이 오래걸린다. 셀계산을 수동으로 하더라도 중간에 반드시 셀계산을 해야할 때가 온다. 그 때마다 지연되는 시간은 실무자에겐 정말 지루하게 느껴지기 마련이다. 작업 흐름도 끊긴다.

해결 방법은 피벗 테이블을 활용하는 것이다. 그냥 피벗 테이블을 사용하는 방법도 있고, 피벗 테이블을 응용하는 다른 방법도 있다. 피벗 테이블에 대해서 공부하고 다루기로 하겠다.

마무리

나의 경험으로는 대부분 배열 함수가 좋은데 속도가 느리다는 단점이 있다. 속도가 크게 문제되지 않는 선에서 사용하면 좋을 것 같다. 데이터의 특성을 활용하면 시간을 줄일 수 있는 방법은 많다. 독자 스스로 생각해보기 바란다.