在 Excel 中,若你需要逐項處理陣列並保留每一步的累積結果,例如建立累加欄位、追蹤狀態變化或模擬遞迴邏輯,SCAN 函數是最適合的工具之一。它能從初始值開始,依序處理陣列中的每一項,並回傳每一步的累積結果陣列,適合用在報表設計、資料模擬、教學範例與進階邏輯封裝等場景。
🔹快速摘要(語法、用途、常見場景)
- 用途:依序處理陣列並回傳每一步的累積結果陣列
- 語法:
=SCAN(初始值, 陣列, LAMBDA(累積值, 當前項目)) - 常見場景:累加欄位、狀態追蹤、條件統計、遞迴模擬、教學設計
一、SCAN 函數語法與用途:逐步累加的動態陣列工具
語法:
=SCAN(initialValue, array, LAMBDA(accumulator, current))
- initialValue:起始累積值,可為數值、文字或陣列
- array:要處理的陣列
- LAMBDA(accumulator, current):自訂邏輯,將累積值與目前項目運算後回傳新累積值
- 回傳結果為陣列,包含每一步的累積結果
二、範例教學:五個基礎 + 五個進階範例
🔸基礎範例(適合初學者快速掌握用途)
範例一:建立累加欄位
=SCAN(0, A2:A6, LAMBDA(acc, x, acc + x))
依序加總 A2:A6,每列顯示累積結果。
範例二:建立累積乘積欄位
=SCAN(1, A2:A6, LAMBDA(acc, x, acc * x))
依序相乘 A2:A6,每列顯示累積乘積。
範例三:建立文字串接欄位
=SCAN("", A2:A6, LAMBDA(acc, x, acc & x))
依序串接文字,回傳每一步的結果。
範例四:建立最大值追蹤欄位
=SCAN(-99999, A2:A6, LAMBDA(acc, x, MAX(acc, x)))
每列顯示目前為止的最大值。
範例五:建立條件累積計數欄位
=SCAN(0, A2:A6, LAMBDA(acc, x, acc + IF(x>100, 1, 0)))
每列顯示目前為止大於 100 的項目數。
🔸進階範例(適合報表設計與邏輯模擬應用)
範例六:建立動態狀態追蹤欄位
=SCAN("", A2:A6, LAMBDA(acc, x, IF(x="錯誤", acc & "⚠", acc & ".")))
每列顯示狀態符號,追蹤是否出現錯誤。
範例七:建立加權累積總分
=SCAN(0, SEQUENCE(5), LAMBDA(acc, i, acc + INDEX(A2:A6, i) * INDEX(B2:B6, i)))
依序加總 A 欄分數 × B 欄權重。
範例八:建立條件文字串接(僅串接符合條件者)
=SCAN("", A2:A6, LAMBDA(acc, x, IF(x<>"", acc & x & ", ", acc)))
每列顯示目前為止的有效項目串接結果。
範例九:建立累積差異欄位
=SCAN(0, A2:A6, LAMBDA(acc, x, x - acc))
每列顯示與前一項的差異。
範例十:建立累積邏輯判斷欄位(是否曾出現指定值)
=SCAN(FALSE, A2:A6, LAMBDA(acc, x, acc OR x="警告"))
每列顯示是否曾出現「警告」。
三、常見問題解答(FAQ)
Q1:SCAN 和 REDUCE 有什麼差別?
SCAN 回傳每一步的累積結果陣列,REDUCE 只回傳最終結果。
Q2:SCAN 可以處理文字嗎?
可以,累積值可為文字、數值或混合內容。
Q3:SCAN 可以搭配哪些函數使用?
常見搭配 LAMBDA、SEQUENCE、INDEX、IF、TEXT、MAP 等。
Q4:SCAN 可以處理多欄陣列嗎?
可以,需搭配 INDEX 或 MAP 拆解欄位。
Q5:SCAN 可以用在圖表或報表嗎?
可以,用於建立累積欄位、狀態追蹤、條件統計等報表欄位。
四、注意事項與錯誤排除
- SCAN 需搭配 Excel 365,舊版不支援
- 初始值類型需與累積邏輯一致,否則回傳錯誤
- 若邏輯公式錯誤,可能回傳
#VALUE!或#CALC! - 若處理陣列過大或邏輯過複雜,可能影響效能
- 建議搭配錯誤防呆邏輯處理空值或格式異常
五、延伸技巧與相關函數
- REDUCE 函數:逐項累加並回傳最終結果
- LAMBDA 函數:自訂邏輯核心,SCAN 必備搭配
- MAP 函數:逐項處理陣列內容,可與 SCAN 串接
- SEQUENCE / INDEX 函數:建立與提取陣列項目
- IF / TEXT / CONCAT:條件處理與格式化輸出
六、結語與延伸閱讀推薦
SCAN 函數是 Excel 中最具邏輯彈性的動態陣列工具之一,適合用在報表設計、條件統計、狀態追蹤與邏輯模擬等情境。學會 SCAN 後,你可以進一步探索:
- [REDUCE 函數教學:逐項累加並回傳最終結果的進階方法]
- [MAP 函數教學:逐項處理與格式轉換的動態技巧]
- [LAMBDA 函數教學:封裝公式邏輯的模組化工具]
















