迴圈計算,又稱遞迴運算,即反復呼叫自身的結果進行新的運算。除了VBA,以前是沒有任何函式可以完成這樣的功能的,而新函式
REDUCE
則可以(
WPS目前不支持,而但很多也會添加
)。所以蘭色稱它們為超能力函式。
是不是聽的迷迷糊糊的?還是舉幾個例子更容易理解。
【例】如下圖所示,要求把A列 大於30 的數位用逗號全部連線到一起。結果如C1單元格所示。
分析:
A列的數位需要逐個判斷是否大於30,A1的值
37
大於30,保留在一個臨時結果中。當判斷到A4單元格(值為33)時,就會用上次臨時結果37連線33,得到新的臨時結果
37,33
,判斷到A6單元格(值42)也大於30,會用上一次的結果
37,33
連線A6值
,
即得到新的臨時結果
37,33,42
,這樣一直迴圈運算下去,得到最終結果
37,33,42,50
。
新函式Reduce則可以實作上述迴圈運算過程。公式為:
=REDUCE(,
A1:A9
,LAMBDA(
X
,
Y
,
IF(
Y
>30,X&","&
Y
,X)
))
運算原理:
第一個參數是初始值( 留空 ) 在lambda的參數中對應 X 值的初始值
第二個參數 A1:A9 是一組數,對應 Y 值( Y是第二個參數的逐個遍歷的值 )。
IF( Y >30,X&","& Y ,X) 判斷 Y 值是否大於30,如果大於則用上一次運算結果X值連線Y,否則保留上一次運算的結果X。而新的 IF( Y >30,X&","& Y ,X) 運算結果,則是下一次運算式中的X值。
如果還不理解,再看一個使用者的真實提問:
【例】 如下圖所示,D列為地名,要求把A列中包含的地名全部刪除,結果為E列所示。如A2和A3單元格都有D列的 成都 (d14單元格) ,所以刪除後的結果如E2和E3所示。
這個範例正好可以用Reduce函式解決:
=REDUCE( A2 ,$D$2:$D$14,LAMBDA( x ,y, SUBSTITUTE(x,y,"") ))
註:A2是X的初始值, SUBSTITUTE(x,y,"") 是逐個用D列的值對X進行替換,結果作為新的待替換X值。 SU BS TI TUTE(x,y,"") 最後一次運算的結果,也是公式的最終結果。
蘭色說 :遞迴運算在VBA編程裏是一個難點,而具有遞迴運算的函式也同樣不容易難理解它的計算過程。只是,這種運算可以解決工作中很多大難題,所以這類函式蘭色還是建議同學們盡量掌握。以後蘭色也會盡量分享更多的套用例項。
蘭色根據多年經驗,錄制了一全套適合新手和初中級階段使用者學習的Excel教程。包括 Excel表格88個函式用法( 即將更新幾十個新函式 )、119個使用技巧、透視表從入門到精通50集、圖表從入門到精通186集 。( 綠卡會員 有效期內 免費 )詳情點選下方連結