Menu

Hàm LAMBDA trong Excel: hàm tự tạo, MAP và BYROW

=LAMBDA(price,price*1.2)(B2) định nghĩa một hàm nhỏ có một đầu vào là price và gọi nó trên B2. Lưu LAMBDA trong Name Manager để dùng như hàm có sẵn, hoặc truyền nó vào MAP, BYROW, SCAN và REDUCE.

Mọi bảng tính trên trang này đều trực tiếp: đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

=LAMBDA(price,price*1.2)(B2) định nghĩa một hàm nhỏ có một đầu vào, price, và gọi nó ngay trên B2: giá 2,5 của cây bút thành 3. Chỉ như vậy thì nó chẳng khác gì một =B2*1.2 dài hơn. Giá trị thật của LAMBDA là đặt cho hàm một cái tên trong Name Manager, để một công thức dài trở thành =ADDVAT(B2), và truyền nó vào MAP, BYROW cùng các hàm khác bên dưới.

Một hàm được gọi trên từng mức giá
C2
ABC
1ItemPriceWith VAT
2Pen2.53
3Bag120144
4Lamp3542
5Mug89.6
6Desk150180
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Cú pháp hàm LAMBDA

=LAMBDA([parameter1, parameter2, ...], calculation)
  • Mỗi parameter là tên của một đầu vào, giống các tên trong LET. Được phép có tối đa 253 tham số.
  • Đối số cuối cùng là calculation, phép tính dùng các tham số đó.
  • Giá trị của các tham số đặt trong ngoặc ngay sau dấu đóng ngoặc: =LAMBDA(x,y,x*y)(3,4) trả về 12.

LAMBDA, MAP, BYROW, BYCOL, SCAN, REDUCE và MAKEARRAY cần Microsoft 365, Excel 2024 hoặc Excel cho web. Excel 2021 có LET nhưng không có các hàm này. Google Sheets cũng có LAMBDA, và lưu nó dưới một tên bằng Data > Named functions.

Lưu LAMBDA thành hàm tự tạo

Một LAMBDA trở nên dùng lại được khi bạn đặt tên cho nó. Excel không cần VBA hay add-in nào cho việc này:

  1. Vào Formulas > Name Manager và bấm New (hoặc Formulas > Define Name).
  2. Trong Name, nhập tên hàm, ví dụ ADDVAT.
  3. Trong Refers to, nhập LAMBDA không kèm đầu vào: =LAMBDA(price,price*1.2).
  4. Bấm OK. Giờ hãy nhập =ADDVAT(B2) vào bất kỳ ô nào trong workbook.
Name:        ADDVAT
Refers to:   =LAMBDA(price,price*1.2)
In a cell:   =ADDVAT(B2)        returns 3 when B2 is 2.5

Hàm chỉ tồn tại trong workbook đó. Sao chép một trang tính có dùng hàm sang workbook khác thì tên hàm cũng đi theo. Sửa LAMBDA một lần trong Name Manager và mọi ô gọi nó đều cập nhật. Hãy thử LAMBDA trong một ô với đầu vào trong ngoặc trước khi lưu; ở đó dễ thấy lỗi hơn.

MAP: áp dụng LAMBDA cho từng ô

MAP gọi LAMBDA một lần cho mỗi ô của vùng và trả về một vùng cùng hình dạng. Ở đây mọi mức giá trên 100 được giảm 10%:

Giảm 10% cho giá trên 100
C2
ABC
1ItemPricePrice to pay
2Pen2.52.5
3Bag120108
4Lamp3535
5Mug88
6Desk150135
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Chiếc túi (120) thành 108 và chiếc bàn (150) thành 135; các giá khác giữ nguyên. Một công thức ở C2 xử lý cả cột. MAP còn có thể đi song song qua hai vùng cùng kích thước: với số lượng ở D2:D6, =MAP(B2:B6,D2:D6,LAMBDA(p,q,p*q)) nhân mỗi mức giá với số lượng tương ứng.

BYROW: mỗi hàng một kết quả

BYROW đưa cho LAMBDA cả một hàng mỗi lần, nên LAMBDA có thể dùng MAX, SUM hoặc AVERAGE trên hàng đó. Điểm cao nhất và điểm trung bình của từng học sinh:

Điểm cao nhất và trung bình của từng học sinh
E2
ABCDEF
1StudentTest 1Test 2Test 3BestAverage
2Ann7285909082.3
3Ben6470587064
4Cara8892959591.7
5Dan7560818172
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

E2 trả về 90, 70, 95 và 81; F2 trả về 82,3; 64; 91,7 và 72. Một =MAX(B2:D5) thông thường chỉ cho một con số cho cả bảng; BYROW là thứ giữ các hàng tách biệt trong một công thức duy nhất. BYCOL làm điều tương tự theo từng cột: =BYCOL(B2:D5,LAMBDA(c,AVERAGE(c))) trả về điểm trung bình của từng bài kiểm tra.

SCAN và REDUCE: tổng lũy kế

REDUCE đi qua một vùng và mang theo một giá trị, chỉ trả về kết quả cuối cùng. SCAN cũng làm vậy nhưng trả về mọi bước, nên chỉ một công thức là có tổng lũy kế:

Tổng lũy kế và tổng cuối
C2
ABCD
1ItemPriceRunning totalTotal
2Pen2.52.5315.5
3Bag120122.5
4Lamp35157.5
5Mug8165.5
6Desk150315.5
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đối số đầu tiên, 0, là giá trị khởi đầu. Với mỗi mức giá, LAMBDA nhận tổng tính đến lúc đó cùng mức giá, rồi trả về tổng mới. C2 lần lượt là 2,5; 122,5; 157,5; 165,5; 315,5, còn D2 chỉ hiện kết quả cuối 315,5. Với một tổng đơn giản thì SUM dễ hơn, nhưng REDUCE mang theo được bất cứ thứ gì, như một đoạn văn bản dài dần hay một số đếm chỉ tăng ở vài hàng.

Đặt tên LAMBDA trong một công thức bằng LET

Một LAMBDA không cần Name Manager nếu chỉ một công thức dùng nó. Đặt tên cho nó bằng LET rồi truyền tên đó vào MAP hoặc BYROW:

LAMBDA được đặt tên rồi truyền vào MAP
C2
ABC
1ItemPriceSale price
2Pen2.52.25
3Bag120108
4Lamp3531.5
5Mug87.2
6Desk150135
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Mọi mức giá được giảm 10%: 2,25; 108; 31,5; 7,2 và 135. Trong Excel bạn cũng có thể gọi trực tiếp LAMBDA đã đặt tên ngay trong LET, =LET(f,LAMBDA(x,x*2),f(5)), trả về 10.

Luyện tập: tổng mỗi hàng với BYROW

Đến lượt bạn
E2
ABCDE
1StudentTest 1Test 2Test 3Total
2Ann728590
3Ben647058
4Cara889295
5Dan756081
Bấm vào một ô để xem công thức. Đổi một số hoặc công thức, bảng tính sẽ tự tính lại.

Đến lượt bạn: Trong E2, trả về tổng ba bài kiểm tra của từng học sinh, mỗi hàng một con số, chỉ với một công thức.

Các lỗi thường gặp với 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! nghĩa là một LAMBDA nằm trong ô mà không được gọi. Thêm đầu vào trong ngoặc, hoặc lưu nó trong Name Manager rồi gọi theo tên.
  • #VALUE! nghĩa là số giá trị không khớp với số tham số. Hãy đếm ở cả hai phía.
  • #NAME? nghĩa là phiên bản Excel không có LAMBDA, hoặc một tên đã lưu bị gõ sai. Tên tham số theo quy tắc của LET: không có dấu cách, không đặt tên trông giống địa chỉ ô.
  • Một LAMBDA trong BYROW trả về nhiều giá trị cho mỗi hàng sẽ cho #CALC!. Mỗi hàng phải tạo ra một giá trị; nếu muốn trả về một hàng kết quả, hãy dùng MAKEARRAY hoặc một công thức mảng thông thường.

Câu hỏi thường gặp

Hàm LAMBDA trong Excel là gì?

Hàm này biến một công thức thành hàm có các đầu vào được đặt tên. =LAMBDA(price,price*1.2) nhận một đầu vào tên là price và trả về price nhân 1,2. Gọi nó bằng cách thêm đầu vào trong ngoặc, =LAMBDA(price,price*1.2)(B2), hoặc lưu nó dưới một tên trong Name Manager.

Làm sao tạo hàm tự định nghĩa trong Excel mà không cần VBA?

Mở Formulas > Name Manager > New, nhập một tên như ADDVAT, và trong Refers to nhập =LAMBDA(price,price*1.2). Bấm OK, và =ADDVAT(B2) sẽ chạy ở mọi ô trong workbook đó.

Vì sao LAMBDA trả về #CALC!?

Một LAMBDA nhập vào ô mà không có đầu vào, như =LAMBDA(x,x*2), là một hàm chưa bao giờ được gọi, nên Excel hiện #CALC!. Thêm đầu vào trong ngoặc ngay sau nó, =LAMBDA(x,x*2)(5), hoặc lưu nó trong Name Manager.

Phiên bản Excel nào có LAMBDA?

Microsoft 365, Excel 2024 và Excel cho web, cùng với MAP, BYROW, BYCOL, SCAN, REDUCE và MAKEARRAY. Excel 2021 có LET nhưng không có LAMBDA.

Hàm BYROW trong Excel làm gì?

Hàm này chạy một LAMBDA một lần cho mỗi hàng của vùng và trả về một kết quả cho mỗi hàng: =BYROW(B2:D5,LAMBDA(r,MAX(r))) trả về giá trị lớn nhất của từng hàng, trả tràn xuống dưới.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu