MAP / REDUCE / SCAN
LogicExcel 365
MAP(mảng_1, [mảng_2], ..., LAMBDA(a, [b], công_thức))REDUCE([giá_trị_đầu], mảng, LAMBDA(tích_luỹ, phần_tử, công_thức))SCAN([giá_trị_đầu], mảng, LAMBDA(tích_luỹ, phần_tử, công_thức))Bộ ba duyệt mảng: MAP biến từng phần tử thành phần tử mới, REDUCE gộp cả mảng thành MỘT giá trị, SCAN gộp dần và trả về từng bước — chính là cột luỹ kế.
Các đối số
| Đối số | Bắt buộc? | Ý nghĩa |
|---|---|---|
| mảng | Bắt buộc | Vùng cần duyệt. |
| giá_trị_đầu | Tuỳ chọn | Giá trị khởi đầu của phần tích luỹ ở REDUCE và SCAN, ví dụ số dư đầu kỳ. |
| LAMBDA(...) | Bắt buộc | MAP nhận từng phần tử; REDUCE và SCAN nhận thêm giá trị tích luỹ từ bước trước. |
Ví dụ
=SCAN(0, C2:C500, LAMBDA(a, b, a+b))Cột luỹ kế trong MỘT công thức, thay cho SUM($C$2:C2) kéo xuống
Kết quả: cột luỹ kế
=REDUCE(0, C2:C500, LAMBDA(a, b, a+b))Gộp cả cột thành một số — ở đây tương đương SUM
Kết quả: 1.284.000
=MAP(C2:C500, LAMBDA(x, IF(x<0, 0, x)))Đưa mọi số âm về 0, giữ nguyên phần còn lại
Kết quả: cột kết quả
Lưu ý khi dùng
- SCAN là cách gọn nhất để làm số dư luỹ kế, và không sợ ai đó kéo hụt vài dòng như cách viết SUM($C$2:C2).
- Ba hàm này chạy chậm hơn công thức thường trên vùng rất lớn — vài chục nghìn dòng thì nên đo trước.
Bẫy hay dính
Thứ tự tham số của REDUCE và SCAN là (tích_luỹ, phần_tử) — viết ngược lại vẫn chạy và vẫn ra số, chỉ là số sai. Kiểm bằng cách so tổng cuối cùng của SCAN với SUM của cả cột.