Menu

엑셀 LAMBDA 함수 사용법: 사용자 지정 함수, MAP, BYROW

=LAMBDA(price,price*1.2)(B2)는 입력이 price 하나인 작은 함수를 정의하고 B2에 대해 호출합니다. 이름 관리자에 LAMBDA를 저장하면 기본 함수처럼 쓸 수 있고, MAP, BYROW, SCAN, REDUCE에 넘길 수도 있습니다.

이 페이지의 모든 시트는 실제로 동작합니다. 숫자나 수식을 바꾸면 다시 계산됩니다.

=LAMBDA(price,price*1.2)(B2)는 입력이 price 하나인 작은 함수를 정의하고 바로 B2에 대해 호출합니다. 펜의 2.5가 3이 됩니다. 이것만으로는 =B2*1.2를 길게 쓴 것일 뿐입니다. LAMBDA의 핵심은 이름 관리자에서 함수에 이름을 붙여 긴 수식을 =ADDVAT(B2)로 만드는 것, 그리고 아래의 MAP, BYROW 같은 함수에 넘기는 것입니다.

가격마다 호출하는 함수
C2
ABC
1ItemPriceWith VAT
2Pen2.53
3Bag120144
4Lamp3542
5Mug89.6
6Desk150180
셀을 클릭하면 수식이 보입니다. 숫자나 수식을 바꾸면 시트가 다시 계산됩니다.

LAMBDA 구문

=LAMBDA([parameter1, parameter2, ...], calculation)
  • 각 parameter는 LET의 이름처럼 입력에 붙이는 이름입니다. 253개까지 쓸 수 있습니다.
  • 마지막 인수는 매개 변수를 쓰는 calculation입니다.
  • 매개 변수에 넣을 값은 닫는 괄호 바로 뒤의 괄호 안에 씁니다: =LAMBDA(x,y,x*y)(3,4)는 12를 반환합니다.

LAMBDA, MAP, BYROW, BYCOL, SCAN, REDUCE, MAKEARRAY는 Microsoft 365, Excel 2024 또는 웹용 Excel이 필요합니다. Excel 2021에는 LET은 있지만 이 함수들은 없습니다. Google Sheets에도 LAMBDA가 있으며, 데이터 > 이름이 지정된 함수로 이름을 붙여 저장합니다.

LAMBDA를 사용자 지정 함수로 저장하기

LAMBDA는 이름을 붙이면 재사용할 수 있습니다. VBA도 추가 기능도 필요 없습니다:

  1. 수식 > 이름 관리자로 가서 새로 만들기를 클릭합니다(또는 수식 > 이름 정의).
  2. 이름에 함수 이름을 입력합니다. 예를 들어 ADDVAT입니다.
  3. 참조 대상에 입력 없이 LAMBDA를 입력합니다: =LAMBDA(price,price*1.2).
  4. 확인을 클릭합니다. 이제 통합 문서의 어느 셀에든 =ADDVAT(B2)를 입력하세요.
Name:        ADDVAT
Refers to:   =LAMBDA(price,price*1.2)
In a cell:   =ADDVAT(B2)        returns 3 when B2 is 2.5

함수는 그 통합 문서에만 있습니다. 함수를 쓰는 시트를 다른 통합 문서로 복사하면 이름도 함께 갑니다. 이름 관리자에서 LAMBDA를 한 번 바꾸면 그 함수를 호출하는 모든 셀이 갱신됩니다. 저장하기 전에 셀에서 괄호로 입력을 붙여 LAMBDA를 시험해 보세요. 실수가 거기서 더 잘 보입니다.

MAP: 모든 셀에 LAMBDA 적용하기

MAP은 범위의 셀마다 LAMBDA를 한 번씩 호출하고 같은 모양의 범위를 반환합니다. 여기서는 100을 넘는 가격마다 10%를 할인합니다:

100을 넘는 가격은 10% 할인
C2
ABC
1ItemPricePrice to pay
2Pen2.52.5
3Bag120108
4Lamp3535
5Mug88
6Desk150135
셀을 클릭하면 수식이 보입니다. 숫자나 수식을 바꾸면 시트가 다시 계산됩니다.

가방(120)은 108이, 책상(150)은 135가 되고 다른 가격은 그대로 지나갑니다. C2의 수식 하나가 열 전체를 처리합니다. MAP은 같은 크기의 두 범위를 나란히 처리할 수도 있습니다. D2:D6에 수량이 있다면 =MAP(B2:B6,D2:D6,LAMBDA(p,q,p*q))는 각 가격에 수량을 곱합니다.

BYROW: 행마다 결과 하나

BYROW는 LAMBDA에 한 번에 행 전체를 넘기므로 LAMBDA가 그 행에 MAX, SUM, AVERAGE를 쓸 수 있습니다. 학생마다 최고 점수와 평균 점수입니다:

학생별 최고 점수와 평균 점수
E2
ABCDEF
1StudentTest 1Test 2Test 3BestAverage
2Ann7285909082.3
3Ben6470587064
4Cara8892959591.7
5Dan7560818172
셀을 클릭하면 수식이 보입니다. 숫자나 수식을 바꾸면 시트가 다시 계산됩니다.

E2는 90, 70, 95, 81을, F2는 82.3, 64, 91.7, 72를 반환합니다. 그냥 =MAX(B2:D5)를 쓰면 표 전체에 대해 숫자 하나가 나옵니다. BYROW가 수식 하나 안에서 행을 따로 다루게 해 줍니다. BYCOL은 같은 일을 열마다 합니다: =BYCOL(B2:D5,LAMBDA(c,AVERAGE(c)))는 시험별 평균을 반환합니다.

SCAN과 REDUCE: 누적 합계

REDUCE는 범위를 따라가며 값을 계속 넘겨주고 마지막 결과만 반환합니다. SCAN도 같지만 모든 단계를 반환하므로 수식 하나로 누적 합계를 만듭니다:

누적 합계와 합계
C2
ABCD
1ItemPriceRunning totalTotal
2Pen2.52.5315.5
3Bag120122.5
4Lamp35157.5
5Mug8165.5
6Desk150315.5
셀을 클릭하면 수식이 보입니다. 숫자나 수식을 바꾸면 시트가 다시 계산됩니다.

첫 번째 인수 0은 시작값입니다. LAMBDA는 가격마다 지금까지의 합계와 가격을 받아 새 합계를 반환합니다. C2는 2.5, 122.5, 157.5, 165.5, 315.5로 이어지고 D2는 마지막 315.5만 보여 줍니다. 단순한 합계라면 SUM이 더 간단하지만, REDUCE는 늘어나는 텍스트나 일부 행에서만 올라가는 개수처럼 무엇이든 넘겨줄 수 있습니다.

LET으로 수식 하나 안에서 LAMBDA에 이름 붙이기

수식 하나만 LAMBDA를 쓴다면 이름 관리자가 필요 없습니다. LET으로 이름을 붙이고 그 이름을 MAP이나 BYROW에 넘기세요:

이름을 붙여 MAP에 넘긴 LAMBDA
C2
ABC
1ItemPriceSale price
2Pen2.52.25
3Bag120108
4Lamp3531.5
5Mug87.2
6Desk150135
셀을 클릭하면 수식이 보입니다. 숫자나 수식을 바꾸면 시트가 다시 계산됩니다.

모든 가격이 10% 할인되어 2.25, 108, 31.5, 7.2, 135가 됩니다. 엑셀에서는 LET 안에서 이름 붙인 LAMBDA를 바로 호출할 수도 있습니다: =LET(f,LAMBDA(x,x*2),f(5))는 10을 반환합니다.

연습: BYROW로 행별 합계 구하기

직접 해 보기
E2
ABCDE
1StudentTest 1Test 2Test 3Total
2Ann728590
3Ben647058
4Cara889295
5Dan756081
셀을 클릭하면 수식이 보입니다. 숫자나 수식을 바꾸면 시트가 다시 계산됩니다.

직접 해 보세요: E2에서 수식 하나로 학생마다 세 시험의 합계를 행마다 숫자 하나씩 반환하세요.

LAMBDA의 흔한 오류

=LAMBDA(x,x*2)          #CALC!   defined but never called
=LAMBDA(x,x*2)(5)       10
=LAMBDA(x,y,x*y)(3)     #VALUE!  two parameters, one value
=LAMBDA(x,x*2)(3,4)     #VALUE!  one parameter, two values
  • **#CALC!**는 LAMBDA가 호출되지 않은 채 셀에 있다는 뜻입니다. 괄호로 입력을 붙이거나, 이름 관리자에 저장하고 이름으로 호출하세요.
  • **#VALUE!**는 값의 개수가 매개 변수의 개수와 맞지 않는다는 뜻입니다. 양쪽을 세어 보세요.
  • **#NAME?**은 엑셀 버전에 LAMBDA가 없거나 저장한 이름의 철자가 틀렸다는 뜻입니다. 매개 변수 이름은 LET 규칙을 따릅니다. 공백이 없어야 하고 셀 주소처럼 보이면 안 됩니다.
  • 행마다 값을 여러 개 반환하는 BYROW의 LAMBDA는 #CALC!를 냅니다. 각 행은 값 하나를 내야 합니다. 결과를 행으로 반환하려면 대신 MAKEARRAY나 일반 배열 수식을 쓰세요.

자주 묻는 질문

엑셀의 LAMBDA 함수는 무엇인가요?

수식을 이름 있는 입력을 받는 함수로 바꿉니다. =LAMBDA(price,price*1.2)는 price라는 입력 하나를 받아 price에 1.2를 곱한 값을 반환합니다. 괄호 안에 입력을 붙여 =LAMBDA(price,price*1.2)(B2)처럼 호출하거나, 이름 관리자에서 이름을 붙여 저장하세요.

VBA 없이 엑셀에서 사용자 지정 함수를 만들려면 어떻게 하나요?

수식 > 이름 관리자 > 새로 만들기를 열고 ADDVAT 같은 이름을 입력한 뒤 참조 대상에 =LAMBDA(price,price*1.2)를 입력합니다. 확인을 클릭하면 그 통합 문서의 어느 셀에서든 =ADDVAT(B2)가 동작합니다.

LAMBDA가 #CALC!를 반환하는 이유는 무엇인가요?

=LAMBDA(x,x*2)처럼 입력 없이 셀에 입력한 LAMBDA는 한 번도 호출되지 않은 함수이므로 엑셀이 #CALC!를 표시합니다. 뒤에 괄호로 입력을 붙이거나(=LAMBDA(x,x*2)(5)) 이름 관리자에 저장하세요.

LAMBDA는 어느 엑셀 버전에 있나요?

Microsoft 365, Excel 2024, 웹용 Excel에 MAP, BYROW, BYCOL, SCAN, REDUCE, MAKEARRAY와 함께 있습니다. Excel 2021에는 LET은 있지만 LAMBDA는 없습니다.

엑셀에서 BYROW는 무엇을 하나요?

범위의 행마다 LAMBDA를 한 번씩 실행하고 행마다 결과 하나를 반환합니다: =BYROW(B2:D5,LAMBDA(r,MAX(r)))는 각 행의 가장 큰 값을 아래로 분산해 반환합니다.

Coddy 프로그래밍 언어 일러스트

Coddy로 코딩 배우기

시작하기