LAMBDA · MAP · REDUCE · SCAN · BYROW · BYCOL · MAKEARRAY로 수식 자동화 끝! (반복 작업 1분 컷)

LAMBDA MAP REDUCE SCAN — 꽁이가 카드 블록을 쌓아 함수들을 가리키는 에디터 콘셉트
LAMBDA · MAP · REDUCE · SCAN · BYROW · BYCOL · MAKEARRAY로 수식 자동화 끝! (반복 작업 1분 컷)

LAMBDA · MAP · REDUCE · SCAN · BYROW · BYCOL · MAKEARRAY로 수식 자동화 끝! (반복 작업 1분 컷)

검수 고지: 이 글은 편집자가 Excel 365에서 직접 재현·검수했으며, 초안 정리에 AI 도구를 보조적으로 사용했습니다.

문법 & 핵심 개념

함수형식포인트
LAMBDA=LAMBDA(param1, param2, …, 계산식)이름 정의로 저장해 사용자 정의 함수처럼 사용
MAP=MAP(array1, [array2],…, LAMBDA(x,[y],…, 식))각 원소에 함수 적용(스칼라/행렬)
REDUCE=REDUCE(init, array, LAMBDA(acc, x, 식))누적 집계 후 최종값 반환
SCAN=SCAN(init, array, LAMBDA(acc, x, 식))누적 과정을 단계별로 스필
BYROW/BYCOL=BYROW(array, LAMBDA(r, 식)) / =BYCOL(array, LAMBDA(c, 식))행/열 단위 연산
MAKEARRAY=MAKEARRAY(rows, cols, LAMBDA(r,c, 식))행·열 위치에 따라 값 생성

LAMBDA로 “내 함수” 만들기

예: 안전한 나눗셈 함수

=LAMBDA(n,d, IF(d=0,"", n/d))

수식 탭 → 이름 관리자 → SAFE.DIVIDE로 저장하면, =SAFE.DIVIDE(A2,B2)처럼 사용 가능.

예: 텍스트 정리 함수(공백/대소문자)

=LAMBDA(t, PROPER(TRIM(SUBSTITUTE(t,CHAR(160)," "))))

MAP/REDUCE/SCAN — 함수형 처리

MAP: 가격에 부가세 일괄 반영

=MAP(Price, LAMBDA(p, ROUND(p*1.1,0)))

REDUCE: 조건부 합계(티어별 가중치)

=REDUCE(0, ROWS(Sales),
 LAMBDA(acc, i,
  LET(s, INDEX(Sales,i),
      t, INDEX(Tier,i),
      acc + s * XLOOKUP(t, {"A","B","C"}, {1,0.9,0.8}))))

SCAN: 누적 합계(러닝 토탈)

=SCAN(0, Sales, LAMBDA(acc, x, acc+x))

BYROW/BYCOL — 행/열 단위 계산

BYROW: 각 행에서 “키워드 포함 여부” 플래그

=BYROW(LOWER(Description),
 LAMBDA(r, SUM(--ISNUMBER(SEARCH(TRANSPOSE({"delay","refund","defect"}), r)))>0 ))

BYCOL: 각 월 합계

=BYCOL(SalesTbl, LAMBDA(c, SUM(c)))

MAKEARRAY — 사용자 정의 배열 생성

달력 그리드(YYYY-MM)

=LET(d, DATE(2025,8,1),
 days, SEQUENCE(DAY(EOMONTH(d,0))),
 MAKEARRAY(6,7, LAMBDA(r,c, LET(x, INDEX(days,(r-1)*7+c), IFERROR(DATE(YEAR(d),MONTH(d),x),"")))))

가우시안 가중치 커널(3×3)

=MAKEARRAY(3,3, LAMBDA(r,c, CHOOSE({1,2,3},{1,2,1},{2,4,2},{1,2,1})[r,c]/16))

실무 패턴 12가지

① 표준화 함수(평균·표준편차)

=LAMBDA(x, rng, (x-AVERAGE(rng))/STDEV(rng))(Score, Score)

② MAP로 텍스트 포맷

=MAP(Email, LAMBDA(e, LOWER(TRIM(e))))

③ REDUCE로 “가중 평균”

=LET(n, ROWS(Val), REDUCE(0, SEQUENCE(n),
 LAMBDA(acc, i, acc + INDEX(Val,i)*INDEX(Wt,i))) / SUM(Wt))

④ SCAN으로 KPI 신호 전환점 찾기

=LET(r, SCAN(0, Rate, LAMBDA(a,x, x-a)), XMATCH(TRUE, r<0))

⑤ BYROW로 행별 결측치 개수

=BYROW(Data, LAMBDA(r, SUM(--(r=""))))

⑥ BYCOL로 Z-점수 표

=BYCOL(Data, LAMBDA(c, (c-AVERAGE(c))/STDEV(c)))

⑦ MAKEARRAY로 인덱스 매트릭스

=MAKEARRAY(ROWS(Data), COLUMNS(Data), LAMBDA(r,c, r & "-" & c))

⑧ LAMBDA로 “안전한 VLOOKUP” 래퍼

=LAMBDA(key, kRange, vRange, IFERROR(XLOOKUP(key,kRange,vRange),"없음"))

⑨ MAP+TEXTAFTER: 이메일 도메인 추출

=MAP(Email, LAMBDA(e, TEXTAFTER(e,"@")))

⑩ REDUCE로 “Top-N 합”

=REDUCE(0, TAKE(SORT(Sales,-1), 10), LAMBDA(acc,x, acc+x))

⑪ SCAN으로 러닝 최대값

=SCAN(-1E9, Sales, LAMBDA(a,x, MAX(a,x)))

⑫ BYROW로 규칙 기반 라벨

=BYROW(HSTACK(Price, Stock), LAMBDA(r, IF(INDEX(r,1)>1000000, IF(INDEX(r,2)>0,"프리미엄","재고없음"),"일반")))

자주 하는 실수 & 체크

  • 참조 크기 불일치 — MAP/BYROW/BYCOL 인수의 길이가 다르면 오류. 필요한 부분만 TAKE/CHOOSECOLS로 정렬.
  • 과도한 재계산 — 큰 표는 LET로 중복 계산을 캐시, 필요 시 결과를 값으로 고정.
  • 디버깅 어려움 — LAMBDA 내부를 임시로 일반 수식으로 풀어 중간 값을 확인.
  • 이름 정의 누락 — LAMBDA는 이름 관리자에 저장해야 진짜 “내 함수”가 됨.

요약

목표대표 공식
재사용 함수화LAMBDA(...) + 이름 정의
원소별 처리MAP(array, LAMBDA(x, …))
누적 집계/과정REDUCE / SCAN
행/열 단위BYROW / BYCOL
커스텀 그리드MAKEARRAY(rows, cols, LAMBDA(r,c,…))
팀에서 자주 쓰는 규칙을 LAMBDA + 이름 정의로 “사내 표준 함수”로 배포하세요. 교육·품질·속도가 동시에 개선됩니다.

Leave a Reply

Your email address will not be published. Required fields are marked *