Chia sẻ
"Hướng dẫn hàm LET và LAMBDA trong Excel 365: đặt tên biến, tạo hàm tùy chỉnh, refactor công thức phức tạp thành code sạch và tái sử dụng."
1. Tại sao công thức Excel thường xấu?
Công thức dài → lặp lại tính toán → khó đọc → khó debug. Ví dụ:
=IF(VLOOKUP(A2,Data!A:D,4,0)>1000000,VLOOKUP(A2,Data!A:D,4,0)*0.1,VLOOKUP(A2,Data!A:D,4,0)*0.05)VLOOKUP chạy 3 LẦN cho cùng một giá trị. Chậm và khó bảo trì.
2. Hàm LET — Đặt tên biến
LET cho phép đặt tên cho giá trị trung gian bên trong công thức:
=LET(
doanh_so, VLOOKUP(A2, Data!A:D, 4, 0),
IF(doanh_so > 1000000, doanh_so * 0.1, doanh_so * 0.05)
)2.1. Cú pháp
=LET(name1, value1, [name2, value2, ...], calculation)Tham số | Ý nghĩa |
|---|---|
name1 | Tên biến (không dấu cách, không bắt đầu bằng số) |
value1 | Giá trị gán cho biến |
calculation | Biểu thức cuối cùng sử dụng các biến |
2.2. Nhiều biến
=LET(
revenue, SUMPRODUCT((B2:B100="KD")*C2:C100),
cost, SUMPRODUCT((B2:B100="KD")*D2:D100),
profit, revenue - cost,
margin, profit / revenue,
"Lợi nhuận: " & TEXT(profit, "#,##0") & " | Margin: " & TEXT(margin, "0.0%")
)4 biến: revenue → cost → profit → margin → kết quả cuối cùng.
2.3. Lợi ích LET
Performance: Tính toán trung gian 1 lần, dùng nhiều lần
Readable: Đặt tên có nghĩa thay vì công thức lồng nhau
Debugable: Đổi calculation cuối thành tên biến → xem giá trị trung gian
Scoped: Biến chỉ tồn tại trong công thức, không ô ngoài
3. Hàm LAMBDA — Tạo hàm riêng
LAMBDA tạo hàm tùy chỉnh (custom function) mà bạn có thể GỌI NHƯ HÀM EXCEL:
3.1. Bước 1: Tạo LAMBDA trong Name Manager
Formulas → Name Manager → New
Name:
TinhThue(tên hàm bạn muốn)Refers to:
=LAMBDA(thu_nhap,
LET(
muc1, MIN(thu_nhap, 5000000) * 0.05,
muc2, MAX(MIN(thu_nhap, 10000000) - 5000000, 0) * 0.1,
muc3, MAX(thu_nhap - 10000000, 0) * 0.15,
muc1 + muc2 + muc3
)
)3.2. Bước 2: Sử dụng
=TinhThue(A2)Giờ TinhThue hoạt động như hàm Excel có sẵn — nhập tên, xuất hiện trong autocomplete.
3.3. LAMBDA với nhiều tham số
=LAMBDA(gia, so_luong, chiet_khau,
gia * so_luong * (1 - chiet_khau)
)Đặt tên: TinhTien → Sử dụng: =TinhTien(500000, 10, 0.1) → 4,500,000
4. MAP — Áp dụng LAMBDA lên mảng
=MAP(array, LAMBDA(x, expression))4.1. Ví dụ: Phân loại hàng loạt
=MAP(C2:C100, LAMBDA(doanh_so,
IF(doanh_so >= 100000000, "VIP",
IF(doanh_so >= 50000000, "Gold",
IF(doanh_so >= 10000000, "Silver", "Normal")))
))Áp dụng logic phân loại lên TOÀN BỘ cột → kết quả spill ra 99 ô.
5. REDUCE — Gộp mảng thành 1 giá trị
=REDUCE(initial_value, array, LAMBDA(accumulator, current, expression))5.1. Ví dụ: Running total (tổng tích lũy)
=REDUCE(0, C2:C100, LAMBDA(acc, val, acc + val))5.2. Ví dụ: Nối text
=REDUCE("", A2:A10, LAMBDA(acc, name, acc & name & ", "))Kết quả: "An, Bình, Cường, ..." — nối tất cả tên thành 1 chuỗi.
6. SCAN — Như REDUCE nhưng trả mảng
=SCAN(0, C2:C10, LAMBDA(acc, val, acc + val))Trả mảng running total: 100, 350, 800, 1500, ...
7. BYROW và BYCOL
7.1. BYROW — Áp dụng hàm theo từng hàng
=BYROW(B2:D100, LAMBDA(row, MAX(row)))Trả giá trị lớn nhất của mỗi hàng.
7.2. BYCOL — Áp dụng hàm theo từng cột
=BYCOL(B2:D100, LAMBDA(col, AVERAGE(col)))Trả trung bình của mỗi cột.
8. MAKEARRAY — Tạo mảng từ LAMBDA
=MAKEARRAY(rows, cols, LAMBDA(r, c, expression))8.1. Ví dụ: Bảng cửu chương
=MAKEARRAY(9, 9, LAMBDA(r, c, r * c))Tạo ma trận 9×9 bảng cửu chương chỉ với 1 công thức.
9. Refactor công thức
9.1. Trước (xấu)
=IF(SUMPRODUCT((A2:A100=E2)*(B2:B100="KD")*C2:C100)/SUMPRODUCT((A2:A100=E2)*(B2:B100="KD")*1)>50000000,"VIP","Normal")9.2. Sau (dùng LET)
=LET(
filter, (A2:A100=E2) * (B2:B100="KD"),
total, SUMPRODUCT(filter * C2:C100),
count, SUMPRODUCT(filter * 1),
avg, total / count,
IF(avg > 50000000, "VIP", "Normal")
)Rõ ràng, dễ debug, tính filter 1 lần thay vì 2 lần.
10. Khi nào dùng LET vs LAMBDA?
Dùng LET khi | Dùng LAMBDA khi |
|---|---|
Tối ưu 1 công thức | Tạo hàm tái sử dụng |
Đặt tên biến trung gian | Cần truyền tham số |
Cùng biểu thức 1 ô | Dùng ở nhiều ô/sheet |
Không tạo Named Range | Định nghĩa trong Name Manager |
11. Mẹo LET & LAMBDA
Luôn dùng LET bên trong LAMBDA: LAMBDA chứa LET = code siêu sạch
Debug LET: Đổi calculation cuối thành tên biến → xem giá trị trung gian
LAMBDA recursive: LAMBDA có thể gọi chính nó → giải thuật đệ quy
MAP thay Helper Column: Thay vì tạo cột phụ → MAP áp dụng logic lên mảng
Chia sẻ LAMBDA: Export Name Manager → Import ở file khác
12. Tổng kết
LET và LAMBDA đưa Excel lên một tầm mới — từ spreadsheet thành ngôn ngữ lập trình nhẹ. LET giúp công thức sạch và nhanh, LAMBDA tạo hàm tái sử dụng chuyên nghiệp. Đây là kỹ năng PHẢI CÓ cho ai muốn viết công thức Excel ở mức chuyên gia.
Bình luận
Đăng nhập để tham gia bình luận
Đăng nhậpNhận bài viết mới nhất
Đăng ký để nhận thông báo khi có bài viết mới. Không spam, chỉ kiến thức chất lượng.
