Hàm SCAN là một hàm nâng cao cực kỳ thú vị trong nhóm Lambda. Nếu BYROW hay MAP xử lý dữ liệu theo kiểu “mỗi người một việc” độc lập, thì SCAN lại hoạt động theo kiểu “cộng dồn” (tích lũy).
Nó duyệt qua từng phần tử trong mảng, thực hiện phép tính và giữ lại kết quả của bước trước để dùng cho bước sau.
1. Cú pháp của hàm
SCAN(initial_value, array, LAMBDA(accumulator, current_value, formula))
- initial_value: Giá trị khởi đầu (thường là 0 hoặc chuỗi rỗng “”).
- array: Vùng dữ liệu bạn muốn duyệt qua.
- LAMBDA: Bộ não xử lý.
- accumulator (biến tích lũy): Kết quả của phép tính ở hàng/ô trước đó.
- current_value: Giá trị của ô hiện tại đang xét.
2. Ví dụ thực tế
Ví dụ 1: Tính tổng tích lũy (Running Total)
=SCAN(0, A1:A5, LAMBDA(acc, x, acc + x))
👉 Nếu A1:A5 = {1;2;3;4;5}
👉 Kết quả:
1
3
6
10
15
Ví dụ 2: Nhân tích lũy
=SCAN(1, A1:A5, LAMBDA(acc, x, acc * x))
👉 Kết quả:
1
2
6
24
120
Ví dụ 3: Reset khi gặp điều kiện
=SCAN(0, A1:A10, LAMBDA(acc, x, IF(x=0, 0, acc + x)))
