REDUCE 函數

REDUCEMicrosoft 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 結合,實現更進階的數據處理!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *