REDUCE函數(shù)也是一個神奇的函數(shù)。 REDUCE函數(shù)的執(zhí)行首先隱形攜帶一個“累加器”。在REDUCE函數(shù)執(zhí)行的過程中,對給定數(shù)組或區(qū)域進行循環(huán),依次處理每個元素和累加器,這里的處理是自定義的,可以是數(shù)值的加減乘除,可以是文本的連接,或者其他Excel函數(shù)處理的邏輯。最終函數(shù)的返回值就是累加器。 它的參數(shù)是這樣的: =REDUCE ([initial_value],array, lambda(accumulator, value, calculation)) 其中: initial_value - 累加器的初值, array - 需要循環(huán)處理的數(shù)組或區(qū)域 lambda - 自定義處理方式 accumulator - lambda函數(shù)的變量,代表累加器, value - lambda函數(shù)的變量,代表循環(huán)中的數(shù)組元素, calculation - 表達式,代表對元素和累計器處理的方式,比如寫成accumulator+value就表示將每一個數(shù)組元素加到累加器上。 例如,公式: =REDUCE(0,B3:C5,LAMBDA(acc,a,a+acc)) 就是循環(huán)B3:C5區(qū)域,將每個單元格的值加到累計器中,累加器的初值為0。(其實,就是對B3:C5區(qū)域求和)。 假設(shè)B3:C5區(qū)域是這樣的: 上面公式的計算過程如下所示: 下面我們通過兩個例子說明REDUCE函數(shù)的用法。 我們有下面的一列數(shù)據(jù): 要求計算其中的偶數(shù)和。 乍看上去,這好像可以用SUMIF等函數(shù)解決,其實這是辦不到的。使用REDUCE函數(shù)就可以: =REDUCE(0,B2:B16,LAMBDA(acc,a,IF(ISEVEN(a),a+acc,acc))) 在這個公式中,我們通過LAMBDA函數(shù)的最后一個參數(shù)來自定義循環(huán)處理的方式:將偶數(shù)加到累加器中。 這個問題也可以用SUMPRODUCT等函數(shù)解決,但是REDUCE提供了更加靈活的處理方案。而且,除了數(shù)值外,REDECUE函數(shù)還可以處理文本。 假設(shè),我們有下列數(shù)據(jù): 需要你將其中的小寫字母連接起來,成為一個字符串。 可以使用下面的公式: =REDUCE("",B2:B16,LAMBDA(acc,a,IF(CODE(a)>=97,acc&a,acc))) 這個公式中,首先我們注意到累計器初值為"",當用REDUCE處理文本時,我們一般設(shè)其初值為"";其次,對數(shù)組元素的處理方式不是數(shù)組計算,而是文本連接:&,將每個滿足條件的數(shù)組元素連接到累加器后面。 這里的條件是 CODE(a)>97 這是判斷一個字母是否小寫的方式。 詳細解釋請看視頻: |
|
來自: zonge > 《ExcelEasy》