엑셀 SCAN 함수는 각 항목에 특정 계산을 순차적으로 적용하고 각 단계의 계산 결과를 반환하는 함수입니다.
=SCAN([초기값], 배열, 계산식)
- 초기값을 생략하면 배열의 첫 번째 요소가 초기값으로 사용되고, 두번째 요소부터 계산이 시작됩니다.
- 단순 합계(SUM), 평균(AVERAGE) 등 계산은 'short-form' 내장 함수로 계산할 수 있습니다.
- LAMBDA 함수는 아래 구조로 작성합니다.
예) =SCAN(0, 범위, LAMBDA(a,b,SUM(a,b)))
엑셀 SCAN 함수는 범위의 각 요소에 지정한 계산을 순차적으로 적용하고, 각 단계에서 생성된 중간 결과를 배열로 반환하는 함수입니다. 범위의 누적 합계, 누적 개수, 이동 평균 등 각 항목의 순차적인 계산이 필요할 때 유용하게 사용할 수 있습니다.
=SCAN(0,입고수량,SUM)/ / 입고 수량의 누계를 계산합니다. =SCAN(0,성적,MAX)/ / 각 성적의 최고 점수를 반환합니다.
단순 합계(SUM), 평균(AVERAGE) 은 기본 함수로 쉽게 계산할 수 있고, LAMBDA 를 사용하여 다양한 계산을 수행할 수 있습니다. SCAN 함수는 아래 12개 기본 함수를 제공합니다.
- SUM(합계)
- AVERAGE(평균)
- MEDIAN(중앙값)
- COUNT(숫자개수)
- COUNTA(개수)
- MAX(최대값)
- MIN(최소값)
- PRODUCT(곱)
- ARRAYTOTEXT(텍스트변환)
- CONCAT(텍스트병합)
- STDEV(표준편차)
- VAR(분산)
- MODE(최빈값)
LAMBDA 를 활용한 SCAN 함수는 아래 구조로 작성합니다.
=SCAN(0,범위,LAMBDA(a,b,FUNC(a,b))) / / a: 초기값, b: 현재값으로 각 항목에 순차적으로 함수를 적용합니다. =SCAN(0,범위,LAMBDA(a,b,SUM(a,b))) / / 범위의 누적 합계를 계산합니다. SUM과 동일합니다. =SCAN(0,범위,LAMBDA(a,b,MIN(100,a+b))) / / 범위의 누적 합계를 구하되, 합계가 100이 넘지 않도록 계산합니다.
REDUCE 함수와 유사하게 배열의 모든 요소를 순회하며 계산을 수행하지만, REDUCE는 최종 결과 하나만 반환하는 반면 SCAN은 각 단계의 중간 결과를 모두 배열로 반환합니다.
아래 그림과 같이 일자별 입고 수량이 작성되어 있을 때, 일일 누적 입고 수량의 합계는 다음과 같이 구할 수 있습니다.
=SCAN(0,B2:B10,SUM) / / B2:B10 범위의 누적 합계를 계산합니다.

다음과 같이 SCAN 함수를 사용하면 셀 병합 해제 후 발생하는 공백을 한 번에 채울 수 있습니다.
=SCAN("",A2:A8,LAMBDA(a,b,IF(b="",a,b))) / / A2:A8 범위에 공백이 있을 시, 윗 셀로 값을 채웁니다.

아래 그림과 같이 A열에 각 업무 단계가 나열되어 있을 때, SCAN 함수를 사용하면 각 업무 단계를 한 문장으로 연결할 수 있습니다.
=SCAN(,A2:A6,LAMBDA(a,b,a&"→"&b)) / / A2:A6 범위의 각 항목을 화살표(→)로 연결합니다.

초기값을 생략하면 배열의 첫 번째 요소가 초기값으로 사용되고, 계산은 두 번째 요소부터 시작됩니다.
SCAN 함수의 계산식으로 잘못된 함수를 입력하거나 LAMBDA의 인수가 잘못되면#VALUE! 오류를 반환합니다.
SCAN 함수는 배열을 반환하므로, 결과가 출력될 범위에 기존 데이터가 있으면 #SPILL! 오류를 출력합니다.
SCAN 함수는 M365 또는 2024 이후 버전에서 제공됩니다. 이전 버전에서 SCAN 함수가 사용된 파일을 실행하면 #NAME? 를 반환합니다.