EzTech

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ảngBắt buộcVùng cần duyệt.
giá_trị_đầuTuỳ chọnGiá trị khởi đầu của phần tích luỹ ở REDUCE và SCAN, ví dụ số dư đầu kỳ.
LAMBDA(...)Bắt buộcMAP 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.

Hàm liên quan

Chat ZaloGọi điệnMessengerTìm đường