REDUCE 是 Microsoft 365 Excel 提供的 動態陣列聚合函數,它可以從 一個初始值開始,逐步對陣列中的每個元素執行 LAMBDA 運算,並累積結果。
這對於 累加、連乘、串接字串、自訂聚合運算 特別有用,適合與 LAMBDA、SCAN、MAP、BYROW、BYCOL 等函數組合使用!
? REDUCE 函數語法
REDUCE(initial_value, array, lambda(accumulator, value))
- initial_value:初始值,計算從這個值開始累積。
- array:要逐步處理的陣列。
- lambda(accumulator, value):
- accumulator:累積值,存儲計算結果並傳遞到下一次運算。
- value:目前處理的陣列元素。
? 作用:遍歷 array,將每個 value 傳入 lambda,並將結果累積到 accumulator 中,最終回傳一個值。
? REDUCE 函數應用範例
1️⃣ 計算陣列的總和
=REDUCE(0, A1:A5, LAMBDA(acc, x, acc + x))
? 效果:從 0 開始,對 A1:A5 逐一相加,回傳總和。
? 等同於 SUM(A1:A5),但可擴展為更複雜的運算!
2️⃣ 計算陣列的乘積
=REDUCE(1, A1:A5, LAMBDA(acc, x, acc * x))
? 效果:計算 A1 * A2 * A3 * ... * A5(逐步累乘)。
? 等同於 PRODUCT(A1:A5)!
3️⃣ 累積字串串接
=REDUCE("", A1:A5, LAMBDA(acc, x, acc & x & ", "))
? 效果:將 A1:A5 的內容 逐一拼接成字串,如 "apple, banana, orange, ..."。
? 等同於 TEXTJOIN(", ", TRUE, A1:A5)!
4️⃣ 找出陣列中的最大值
=REDUCE(-99999, A1:A5, LAMBDA(acc, x, IF(x>acc, x, acc)))
? 效果:逐一檢查 A1:A5,找出最大值。
? 等同於 MAX(A1:A5)!
5️⃣ 計算數組內長度超過 5 個字元的單字數
=REDUCE(0, A1:A10, LAMBDA(acc, x, acc + IF(LEN(x)>5, 1, 0)))
? 效果:統計 A1:A10 所有長度大於 5 的單字數量。
6️⃣ 移除特定字元(刪除 A1:A5 內的 “a”)
=REDUCE(A1:A5, "a", LAMBDA(acc, x, SUBSTITUTE(acc, x, "")))
? 效果:將 A1:A5 中的 "a" 移除。
? 等同於對整個數組執行 SUBSTITUTE(A1, "a", ""),但更加動態!
? REDUCE vs SCAN
| 函數 | 作用 | 適用場景 |
|---|---|---|
| REDUCE | 累積單一結果(總和、最大值) | 適合總結計算(單一輸出) |
| SCAN | 逐步累積計算,回傳完整變化過程 | 適合追蹤計算過程(陣列輸出) |
? 如果你只要最終結果,使用 REDUCE,如果你想保留整個累積過程,使用 SCAN!
? 總結
✅ REDUCE 讓 Excel 公式更靈活,可用於累加、乘積、最大值、字串拼接等應用。
✅ 適合處理動態陣列,並可搭配 LAMBDA 進行自訂聚合運算。
✅ 可與 SCAN、MAP、BYROW、BYCOL 結合,實現更進階的數據處理!