Home MS 엑셀 강좌[엑셀 실무 팁] LET · LAMBDA · SCAN 함수 3대장으로 지옥의 중첩 IF 수식을 나만의 한글 함수와 자동 누적 잔액·재고표로 1초 만에 압축하는 법

[엑셀 실무 팁] LET · LAMBDA · SCAN 함수 3대장으로 지옥의 중첩 IF 수식을 나만의 한글 함수와 자동 누적 잔액·재고표로 1초 만에 압축하는 법

by 김형백
엑셀 LET LAMBDA SCAN 함수로 나만의 한글 커스텀 함수와 누적 잔액 자동 계산표 만드는 법
[30초 핵심 요약 브리핑] 엑셀 LET · LAMBDA · SCAN 함수 3대장 핵심 요약
  • LET 함수 (중복 계산 제거 & 수식 가독성 혁명): 수식 안에서 반복되는 XLOOKUP이나 SUMIFS 결과에 한글·영문 변수 이름을 붙여 한 번만 계산하게 만듭니다. 수식 길이가 절반으로 줄고 대용량 파일 재계산 속도가 2~3배 빨라집니다(Excel 2021·2024·M365·웹용 엑셀 무료 지원).
  • LAMBDA 함수 (VBA 매크로 없는 나만의 한글 함수): 복잡한 세금·성과급·수수료 산식을 =성과급계산(매출, 목표)처럼 나만의 커스텀 함수로 만들어 .xlsm 매크로 보안 경고 없이 일반 .xlsx 통합 문서 어디서나 재사용할 수 있습니다.
  • SCAN 함수 (깨지지 않는 동적 누적 잔액·재고표): 행을 추가하거나 삭제할 때마다 참조가 꼬이던 구식 누적합(=SUM($B$2:B2))을 대체하여, 첫 행 셀 하나에 입력한 한 줄 수식으로 전체 행의 일별 통장 잔액과 재고 수불부를 1초 만에 자동 스필(Spill)합니다(Excel 2024·M365·웹용 엑셀 지원).

회사에서 전임자가 물려준 엑셀 파일을 열었을 때 수식 입력줄에 세 줄, 네 줄씩 이어진 중첩 IF와 똑같은 VLOOKUP 수식이 네다섯 번씩 복사되어 있는 장면을 마주하면 한숨부터 나옵니다. 숫자 기준 하나만 바뀌어도 어디를 고쳐야 할지 몰라 괄호 개수를 세다가 #VALUE! 오류를 내기 일쑤이고, 매크로(VBA)로 사용자 정의 함수를 만들자니 .xlsm 확장자 보안 경고 때문에 거래처나 타 부서 동료가 파일을 열지 못하는 문제가 생깁니다.

이 고질적인 딜레마를 뿌리째 해결하기 위해 마이크로소프트가 도입한 차세대 수식 설계 3대장이 바로 LET, LAMBDA, 그리고 SCAN 함수입니다. 지난 강좌에서 다룬 GROUPBY · PIVOTBY · PERCENTOF 자동 집계표 함수와 VSTACK · HSTACK 다중 시트 1초 병합 공식이 ‘표를 모으고 요약하는 기술’이었다면, 오늘 배우는 세 함수는 복잡한 비즈니스 계산 로직을 깔끔한 한글 변수와 재사용 함수, 자동 누적 잔액 열로 압축하는 고급 실무 무기입니다. 기초 개념인 엑셀 이름 정의하기만 알고 계셔도 10분 만에 바로 내 업무 파일에 적용할 수 있도록 단계별 실전 예제로 완벽히 정복해 보겠습니다.

1. 구식 중첩 수식 vs 최신 LET · LAMBDA · SCAN 패러다임 비교

먼저 왜 실무 고수들이 더 이상 긴 중첩 수식이나 수동 채우기 핸들 드래그를 쓰지 않는지, 구문과 지원 버전을 표로 한눈에 비교해 보겠습니다. 회사 PC가 구형 엑셀이더라도 무료 브라우저 버전인 웹용 엑셀(Excel for the web)에서는 세 함수 모두 무료로 작동합니다.

함수명 및 기본 구문 지원 엑셀 버전 해결해 주는 실무 고충 기존 구식 방식 대비 결정적 우위
LET
=LET(이름1, 값1, [이름2, 값2, ...], 최종계산식)
Excel 2021, 2024, Microsoft 365, 웹용 엑셀 같은 XLOOKUP·SUMIFS를 조건문마다 3~4번 중복 입력해 시트가 느려지는 문제 최대 126개 중간 변수를 선언해 딱 1번만 연산하므로 대용량 시트 속도 2~3배 향상 및 한글 변수명으로 직관적 해독 가능
LAMBDA
=LAMBDA([인수1, 인수2, ...], 계산식)
Excel 2024, Microsoft 365, 웹용 엑셀 복잡한 사내 수수료·세금·등급 공식을 시트마다 복붙하다가 오타가 나는 문제 이름 관리자(Ctrl+F3)에 등록하면 VBA 매크로 없이 일반 .xlsx 파일에서 =우리회사마진율(원가,판가)처럼 호출 가능
SCAN
=SCAN([초기값], 배열, LAMBDA(누적값, 현재값, 계산식))
Excel 2024, Microsoft 365, 웹용 엑셀 =SUM($B$2:B2)나 =D1+B2-C2 누적 잔액 수식이 행 삽입·삭제 시 깨지는 문제 맨 위 셀 하나에만 입력하면 데이터 행이 늘어나도 전체 누적 합계·재고 잔액 열이 자동으로 동적 배열 스필(Spill)됨

2. [실전 1단계] LET 함수: 똑같은 수식 두 번 쓰지 말고 ‘한글 변수’에 담아 3배 빠르게 계산하기

영업사원별 실적 등급을 매길 때 흔히 쓰는 구식 수식을 떠올려 보세요. =IF(SUMIFS(매출열, 사번열, A2) >= 100000000, "S등급", IF(SUMIFS(매출열, 사번열, A2) >= 70000000, "A등급", SUMIFS(매출열, 사번열, A2) * 0.03))처럼 똑같은 SUMIFS를 한 셀 안에서 세 번이나 반복 계산합니다. 행이 2만 개만 넘어가도 엔터를 칠 때마다 엑셀이 멈칫거리는 주범입니다.

2-1. LET 함수 작성 규칙과 줄바꿈(Alt + Enter) 가독성 공식

LET 함수는 홀수 번째 인수에 변수 이름(숫자로 시작 불가, 마침표 사용 불가, 한글 완벽 지원!)을 적고, 짝수 번째 인수에 그 변수에 담을 값이나 수식을 적은 뒤, 맨 마지막 인수에 앞에서 정의한 변수들을 활용한 최종 계산식을 적으면 끝납니다. 이때 수식 입력줄에서 Alt + Enter로 줄을 바꿔 작성하면 마치 깔끔한 메모장처럼 누구나 3초 만에 로직을 읽을 수 있습니다.

[예제 1] 구식 중복 수식을 LET 함수로 압축한 영업 인센티브 자동 산출식

=LET(
총매출, SUMIFS(매출원장!$D$2:$D$50000, 매출원장!$A$2:$A$50000, A2),
매출원가, SUMIFS(매출원장!$E$2:$E$50000, 매출원장!$A$2:$A$50000, A2),
순이익, 총매출 – 매출원가,
마진율, IFERROR(순이익 / 총매출, 0),
IF(마진율 >= 0.3, 순이익 * 0.1, IF(마진율 >= 0.15, 순이익 * 0.05, 0))
)

▶ 핵심 효과: 5만 행에 대한 SUMIFS 연산을 항목당 딱 1번만 수행하고, ‘순이익’과 ‘마진율’이라는 한글 변수명으로 최종 조건식을 구성해 유지보수 시간을 90% 단축합니다!

3. [실전 2단계] LAMBDA 함수: 이름 관리자(Ctrl + F3)로 ‘나만의 한글 커스텀 함수’ 등록하기

LET 함수가 한 셀 안의 수식을 깔끔하게 정리해 준다면, LAMBDA(람다) 함수는 그 수식을 아예 통합 문서 전체에서 쓸 수 있는 새로운 엑셀 기본 함수로 승격시켜 줍니다. 예를 들어 매년 반복되는 해외주식 양도소득세 계산이나 쇼핑몰 마켓별 정산 수수료 공식을 람다로 등록해 두면 신입사원도 괄호 안에 셀 두 개만 찍어 정확한 금액을 구할 수 있습니다.

3-1. 실패 없는 LAMBDA 제작 3단계 (셀 테스트 → 복사 → 이름 관리자 등록)

  1. 1단계 (일반 셀에서 괄호 붙여 즉시 테스트): 람다 수식만 셀에 치면 #CALC! 오류가 뜹니다. 반드시 수식 맨 뒤에 테스트 값을 괄호로 붙여(예: =LAMBDA(이익, 손실, MAX(0, 이익-손실-2500000)*0.22)(10000000, 2000000)) 원하는 결과(1,210,000)가 나오는지 먼저 검증합니다.
  2. 2단계 (이름 관리자 열기): 검증이 끝났다면 뒤의 테스트 괄호 부분만 지우고 앞의 =LAMBDA(...) 본체만 복사한 뒤 단축키 Ctrl + F3(수식 탭 → 이름 관리자 → 새로 만들기)을 누릅니다.
  3. 3단계 (한글 함수명과 설명 입력): [이름] 칸에 해외주식양도세라고 적고, [설명] 칸에 인수: (실현이익합계, 실현손실합계) - 250만원 공제 후 22% 세액 반환을 적은 뒤, [참조 대상] 칸에 복사한 람다 수식을 붙여 넣으면 등록 완료입니다!
[예제 2] 이름 관리자(Ctrl+F3)에 그대로 붙여 넣는 실무형 LAMBDA 함수 2선

① 함수 이름: 해외주식양도세
참조 대상 수식:
=LAMBDA(연간이익, 연간손실,
LET(
순손익, 연간이익 – ABS(연간손실),
과세표준, MAX(0, 순손익 – 2500000),
ROUND(과세표준 * 0.22, 0)
)
)
→ 시트에서 사용법: =해외주식양도세(B2, C2)

② 함수 이름: 오픈마켓순마진
참조 대상 수식:
=LAMBDA(판매가, 매입원가, 수수료율, 배송비,
LET(
마켓수수료, 판매가 * 수수료율,
정산예정금, 판매가 – 마켓수수료 – 배송비,
정산예정금 – 매입원가
)
)
→ 시트에서 사용법: =오픈마켓순마진(C5, D5, 0.108, 3000)

4. [실전 3단계] SCAN 함수: 행을 지워도 절대 깨지지 않는 ‘누적 잔액·재고 수불부’ 1초 자동화

경리·회계·물류 담당자가 가장 골치 아파하는 표가 바로 입출금 내역서나 창고 재고 수불부의 ‘누적 잔액’ 열입니다. 기존처럼 =E2+C3-D3를 아래로 드래그해 두면 중간에 행 하나만 삭제하거나 삽입하는 순간 그 아래 수백 줄에 시뻘건 #REF! 오류가 터집니다. 이때 SCAN 함수를 맨 첫 행(예: E3 셀) 딱 한 곳에만 입력하면 모든 중간 누적 결과를 동적 배열로 한 번에 쏟아내 줍니다.

4-1. SCAN 함수의 작동 원리: (누적값, 현재값) 순서만 기억하세요!

=SCAN(초기값, 스캔할배열, LAMBDA(누적값, 현재값, 계산식))에서 가장 중요한 핵심은 내부 LAMBDA의 매개변수 2개 순서입니다. 첫 번째 변수(acc, 누적값)에는 직전 행까지 계산된 누적 결과가 자동으로 넘어오고, 두 번째 변수(val, 현재값)에는 이번 행의 데이터가 들어옵니다. 만약 기초 통장 잔액이 E1 셀(예: 5,000,000원)에 있고 C2:C100에 입금액, D2:D100에 출금액이 있다면 어떻게 작성할까요? C2:C100 - D2:D100 배열을 바로 스캔하면 보조열 하나 없이 일별 마감 잔액 99줄이 0.1초 만에 완성됩니다.

[예제 3] 실무 즉시 투입! SCAN 함수 활용 3가지 핵심 패턴

패턴 A. 기초 잔액($E$1)부터 시작하는 일별 통장 입출금 누적 잔액 (입금 C2:C20, 출금 D2:D20)
=SCAN($E$1, C2:C20 – D2:D20, LAMBDA(이전잔액, 당일순변동, 이전잔액 + 당일순변동))

패턴 B. 표(Ctrl+T, 표 이름 ‘재고원장’)와 결합해 행 추가 시 자동으로 늘어나는 실시간 재고 수량
=SCAN(0, 재고원장[입고수량] – 재고원장[출고수량], LAMBDA(누적재고, 변동량, 누적재고 + 변동량))
※ 주의: 동적 배열 스필 수식은 엑셀 ‘표(Ctrl+T)’ 내부 열 안에는 직접 넣을 수 없으므로, 표 바로 바깥 오른쪽 열 첫 셀에 입력하거나 일반 범위 + TRIMRANGE(예: C2:.C500)와 함께 사용하세요!

패턴 C. 월이 바뀌거나 부서가 바뀔 때마다 0부터 다시 누적 합계를 리셋하는 조건부 누적합 (A2:A13 부서명, B2:B13 금액)
=LET(
부서, A2:A13,
금액, B2:B13,
SCAN(0, SEQUENCE(ROWS(금액)), LAMBDA(누적, 행번호,
IF(행번호=1, INDEX(금액, 1),
IF(INDEX(부서, 행번호)=INDEX(부서, 행번호-1), 누적 + INDEX(금액, 행번호), INDEX(금액, 행번호))
)
))
)

5. 자주 발생하는 오류(#VALUE!, #CALC!, #SPILL!) 3초 진단표

발생 오류 코드 정확한 발생 원인 즉시 해결 방법
#CALC! ① 일반 셀에 =LAMBDA(x, x+1)만 입력하고 호출 인수를 안 붙였거나,
② SCAN 내부 람다가 단일 값이 아닌 다중 셀 배열을 반환하려 할 때
셀 테스트 시 맨 끝에 (10)처럼 테스트 값을 붙이고, 정식 사용 시 이름 관리자(Ctrl+F3)에 등록 후 함수명으로 호출
#VALUE! ① SCAN 내부 LAMBDA의 매개변수 개수가 정확히 2개(누적값, 현재값)가 아니거나,
② 등록한 커스텀 함수 호출 시 필수 인수 개수를 빼먹었을 때
SCAN(..., LAMBDA(a, b, ...))처럼 인수 2개 서명을 맞추고, 선택 인수는 ISOMITTED(인수) 함수로 기본값 예외 처리
#NAME? ① LET 변수 이름에 마침표(.)를 썼거나 숫자로 시작했을 때,
② 엑셀 2019 이하 구버전에서 열었을 때
변수명을 매출_2026처럼 한글·영문·밑줄(_)로만 작성하고, 구버전 환경에서는 무료 웹용 엑셀(Office.com) 활용
#SPILL! (분산!) SCAN 결과가 쏟아져 내려갈 아래쪽 셀에 빈칸이 아닌 텍스트·공백문자가 있거나, 엑셀 표(Ctrl+T) 내부 셀에 입력했을 때 스필 범위 아래쪽 셀 데이터를 비우거나 엑셀 표 바깥 요약 시트에서 참조하여 출력

6. 자주 묻는 질문 (FAQ Top 3) 및 실무 적용 체크리스트

Q1. 내가 이름 관리자에 등록한 LAMBDA 한글 함수를 다른 동료 파일에서도 바로 쓰게 공유할 수 있나요?

매우 간단합니다! LAMBDA 함수가 등록된 시트 탭을 동료의 엑셀 통합 문서로 하나만 [이동 또는 복사]했다가 지우기만 해도, 이름 관리자에 정의된 모든 커스텀 람다 함수들이 동료의 통합 문서로 자동 복사됩니다. 아예 회사 공용 서식 파일(.xltx)에 자주 쓰는 람다 함수 5~10개를 미리 심어 두면 팀 전체의 표준 계산 엔진이 됩니다.

Q2. SCAN 함수와 REDUCE 함수는 모양이 똑같은데 무엇이 다른가요?

둘 다 (초기값, 배열, LAMBDA(누적값, 현재값, 계산식))으로 구문이 100% 동일합니다. 차이는 단 하나입니다. SCAN은 매 단계의 중간 누적 결과를 전체 배열로 모두 출력해 주고(일별 통장 잔액 열 생성용), REDUCE는 중간 과정은 숨기고 맨 마지막 최종 누적 결과 딱 1개 값만 반환합니다(복합 조건 최종 합산·다중 문자열 치환용).

Q3. LET 안에서 정의한 변수 이름은 다른 셀에서도 부를 수 있나요?

아닙니다. LET으로 선언한 변수는 오직 그 수식이 적힌 셀 내부(지역 범위, Local Scope)에서만 유효하기 때문에 시트 내 다른 이름 정의와 충돌할 걱정이 전혀 없습니다. 통합 문서 전체에서 부르고 싶은 값은 이름 관리자나 LAMBDA로 등록해 사용하시면 됩니다.

[실행 체크리스트] 내 업무 파일 고도화 4단계 실습 루틴
  • [ ] 현재 업무 파일에서 똑같은 XLOOKUP이나 SUMIFS가 한 셀에 2번 이상 들어간 수식을 찾아 LET 한글 변수로 리팩터링하기
  • [ ] 수식 입력줄에서 Alt + Enter 줄바꿈을 습관화해 후임자도 3초 만에 이해하는 클린 수식 작성하기
  • [ ] 매달 반복하는 수수료·세금·인센티브 산식을 LAMBDA로 테스트한 뒤 Ctrl + F3 이름 관리자에 한글 함수로 등록하기
  • [ ] 행 삭제 때마다 깨지던 입출금·재고 누적 합계 열을 지우고 첫 셀 하나에 SCAN 동적 배열 수식으로 교체하기

위 예제 2번에서 만든 =해외주식양도세() 람다 함수의 최신 세법 근거(결제일 T+1, RIA 50% 감면, 배우자 증여 1년 이월과세)는 오늘 함께 발행된 2026 해외주식 양도소득세 250만 원 절세 및 RIA 50% 공제 가이드에 상세히 정리되어 있으며, 초당 1,000줄 엑셀 시트 탐색과 값 붙여넣기 매크로를 원클릭으로 실행하는 장비 조합은 로지텍 MX 마스터 4 vs MX 마스터 3S 완벽 비교를 확인해 보세요.

You may also like

댓글 남기기