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