Excel 中的 LAMBDA 函數可以配合名稱管理員即可以建立自訂函數。

參考這篇文章:Excel-建立可以重複使用的自訂函數(LAMBDA,LET)

LAMBDA 函數也可以搭配特定函數使用而不用到名稱管理員,本篇要針對這些函數來做練習。例如:

REDUCE 函數

透過對每個值套用 LAMBDA 函數並在累計值中傳回總計值,將陣列縮減為累計值。

MAP 函數

透過套用 LAMBDA 函數建立新值,傳回將陣列中每個值對應到新值所形成的陣列。

SCAN 函數

透過對每個值套用 LAMBDA 函數掃描陣列,並傳回具有每個中繼值的陣列。 

 

1. REDUCE 函數應用

語法:REDUCE([initial_value], array, lambda(accumulator, value))

[initial_value]    設定累計值的起始值

array:要縮減的陣列

lambda:呼叫用於縮減陣列的 LAMBDA。LAMBDA 接受兩個參數:

accumulator:值已加總且傳回為最終結果。

value:計算套用至陣列中每個元素。

Excel:REDUCE、MAP、SCAN、LAMBDA函數綜合運用初體驗

運算一

公式:=REDUCE(0,G2:G6,LAMBDA(a,b,a+b))

a=0,b={1, 2, 3, 4, 5}

結果:=0+1+2+3+4+5=15

公式可以看成以「0」為起始值,再把儲存格G2:G6內容逐一加總。

Excel:REDUCE、MAP、SCAN、LAMBDA函數綜合運用初體驗

運算二

公式:=REDUCE(1,G2:G6,LAMBDA(a,b,a+b^2))

a=1,b={1, 2, 3, 4, 5}

結果:=1+1^2+2^2+3^2+4^2+5^2=56

運算三

公式:=REDUCE(2,G2:G6,LAMBDA(a,b,a+b^2))

a=2,b={1, 2, 3, 4, 5}

結果:=2+1^2+2^2+3^2+4^2+5^2=57

 

Excel:REDUCE、MAP、SCAN、LAMBDA函數綜合運用初體驗

運算一

公式:=REDUCE(0,{1,2,3,4,5},LAMBDA(a,b,a+b))

公式:=REDUCE(0,ROW(1:5),LAMBDA(a,b,a+b))

a=0,b={1, 2, 3, 4, 5}

結果:=0+1+2+3+4+5=15

運算二

公式:=REDUCE(1,{1,2,3,4,5},LAMBDA(a,b,a+b^2))

公式:=REDUCE(1,ROW(1:5),LAMBDA(a,b,a+b^2))

a=1,b={1, 2, 3, 4, 5}

結果:=1+1^2+2^2+3^2+4^2+5^2=56

 

2 MAP 函數應用

語法:MAP (array1, lambda_or_array<#>)

array1:要對應的陣列。

lambda_or_array<#>:LAMBDA 必須是最後一個引數,也必須為每個陣列傳遞一個參數,或是有要對應的另一個陣列。LAMBDA 接受兩個參數:

accumulator:值已加總且傳回為最終結果。

value:計算套用至陣列中每個元素。

Excel:REDUCE、MAP、SCAN、LAMBDA函數綜合運用初體驗

以下的範例,可以將陣列內容X2。

(1) 儲存格A2:=MAP({1,2,3,4,5},LAMBDA(a,a*2))

(2) 儲存格A5:=MAP(H1:L1,LAMBDA(a,a*2))

(3) 儲存格A8:=MAP(COLUMN(A:E),LAMBDA(a,a*2))

公式會傳回動態陣列中每一個元素的結果:2、4、6、8、10。

 

Excel:REDUCE、MAP、SCAN、LAMBDA函數綜合運用初體驗

(1) 儲存格A2:=MAP({1,2,3,4,5},{4,5,6,7,8},LAMBDA(a,b,a+b))

二個陣列對應相乘,得到:(1+4)=5、(2+5)=7、(3+6)=9、(4+7)=11、(5+8)=13

(2) 儲存格A6:=MAP({2,8,9},{1,7,6},{3,4,5},LAMBDA(a,b,c,MAX(a,b,c)))

三個陣列對應取最大,得到:MAX(2,1,3)=3、MAX(8,7,4)=8、MAX(9,6,5)=9

(3) 儲存格A10:=MAP(H9:L9,H10:L10,H11:L11,LAMBDA(a,b,c,(a+b)*c))

得到:(1+5)*6=36、(7+2)*2=18、(4+7)*3=33、(2+7)*3=27、(1+1)*3=6

(4) 儲存格A14:=MAP(H13:L13,LAMBDA(a,IF(ISEVEN(a),a,"")))

篩選偶數者,得到:空、2、空、6、6

 

 

3. SCAN 函數應用

語法:SCAN ([initial_value], array, lambda(accumulator, value))

[initial_value]:設定累計值的起始值。

array:要掃描的陣列。

lambda:呼叫用於掃描陣列的 LAMBDA。LAMBDA 接受兩個參數:

accumulator:值已加總且傳回為最終結果。

value:計算套用至陣列中每個元素。

Excel:REDUCE、MAP、SCAN、LAMBDA函數綜合運用初體驗

(1) 儲存格A2:=SCAN(0,{1,2,3,4,5},LAMBDA(a,b,a+b))

得到:0+1=1、1+2=3、3+3=6、6+4=10、10+5=15

SCAN 函數傳回一個動態陣列結果。

比較:=REDUCE(0,{1,2,3,4,5},LAMBDA(a,b,a+b))=15

REDUCE只會傳回一組最後的結果

(2) 儲存格A5:=SCAN("X",H7:L7,LAMBDA(a,b,a&b))

得到:Xa、Xab、Xabc、Xabcd、Xabcde

(3) 儲存格A8:=SCAN({"Good"},{"你","我","他"},LAMBDA(a,b,a&b))

得到:Good你、Good你我、Good你我他

 

參考資源

LAMBDA 函數參考微軟提供的說明:LAMBDA 函數

REDUCE 函數參考微軟提供的說明:REDUCE 函數

MAP 函數參考微軟提供的說明:MAP 函數

SCAN 函數參考微軟提供的說明:SCAN 函數

學不完.教不停.用不盡文章列表

arrow
arrow
    文章標籤
    Excel
    全站熱搜
    創作者介紹
    創作者 vincent 的頭像
    vincent

    學不完.教不停.用不盡

    vincent 發表在 痞客邦 留言(0) 人氣()