新的LAMBDA函數(shù)有助于創(chuàng)作可重復(fù)使用的LAMBDA函數(shù),,同時其本身也是獨立的函數(shù)。Excel公式語言的一個令人興奮的補(bǔ)充是,,LAMBDA現(xiàn)在通過添加新函數(shù),,展示了被視為可接受的值類型的能力。這是一個在許多編程語言中都存在的重要概念,,一般來說,,這等同于lambda函數(shù)的概念。在深入研究新函數(shù)及其工作方式之前,,了解函數(shù)作為值的概念很重要,。在過去幾年中,我們一直在教Excel如何理解新的值類型,。最近添加的一些是數(shù)據(jù)類型(Wolfram,、Geography、Stocks,、Power
BI,,甚至Power
Query都可以創(chuàng)建數(shù)據(jù)類型)和動態(tài)數(shù)組。Lambdas通過允許Excel將函數(shù)理解為值來繼續(xù)擴(kuò)展,。這是通過引入LAMBDA實現(xiàn)的,。這意味著以前幾乎不可能或艱巨的事情現(xiàn)在可以通過編寫LAMBDA并將其作為值傳遞給函數(shù)來實現(xiàn)。例如,,假設(shè)有一個不斷增長的值列表,,檢查大于50但小于80的值,,生成一個布爾值列表,如下圖1所示,。可以為每個值編寫一個函數(shù)來檢查條件,,但這很容易出錯,并且需要為一些非?;镜膬?nèi)容進(jìn)行大量復(fù)制,。作為參考,重復(fù)的公式可能如下(每個值有一個公式):這是一種可以應(yīng)用LAMBDA的場景,,更具體地說,,這是一個使用新MAP函數(shù)的絕佳示例。使用MAP,,可以輕松地創(chuàng)建LAMBDA,,它將公式應(yīng)用于每個值并返回結(jié)果。MAP的超能力是值轉(zhuǎn)換,。=MAP(表1[值],LAMBDA(value, AND(value>G3,value<G4)))只需一個公式,,就可以實現(xiàn)相當(dāng)強(qiáng)大的功能,!新的MAP函數(shù)接受一個(或多個)數(shù)組/區(qū)域引用,并將提供的數(shù)組/區(qū)域中的每個值作為參數(shù)傳遞給LAMBDA函數(shù)(在本例中為表1[值]),。LAMBDA接受來自MAP的參數(shù)這一事實是在檢查每個新函數(shù)時需要記住的一個重要概念,,因為每個新函數(shù)都不同。在上面的例子中,,有一個數(shù)組,,因此LAMBDA非常簡單,只需要一個參數(shù),。集中于LAMBDA本身,,可以看到,在這個示例中,,選擇將單個參數(shù)稱為“value”,,但可以使用任何合法參數(shù)名稱來調(diào)用它:LAMBDA(value,
AND(value>F2, value<F3))使用這些新函數(shù),需要理解的另一個關(guān)鍵概念是,,Excel將對提供的每個值進(jìn)行計算,,然后讓LAMBDA完成繁重的工作。在這種特殊情況下,,它將返回一個結(jié)果數(shù)組,,但這里介紹的其他函數(shù)將只返回一個值。雖然MAP被證明對轉(zhuǎn)換值列表很有用,,但假設(shè)想計算滿足條件的項數(shù),。這一次,重復(fù)使用與之前相同的邏輯,,但將計算包裝在IF中進(jìn)行計數(shù)。與之前一樣,,公式非常簡單,,因為只需要一個函數(shù)調(diào)用:=REDUCE(0,表1[值],LAMBDA(accumulator,value,IF(AND(value>G3,value<G4),1+accumulator,accumulator)))與REDUCE的主要區(qū)別在于,,它在LAMBDA值中使用了兩個參數(shù):accumulator:REDUCE和每個LAMBDA調(diào)用返回的初始值。另一個需要注意的是第一個參數(shù),,它是accumulator的[initial
value],。在例子中,指定為0,。accumulator允許編寫自己的自定義聚合IF函數(shù)(甚至可以使用REDUCE編寫PRODUCTIF),,如果集中于LAMBDA的計算部分,可以看到:IF(AND(value>G3,value<G4),1+accumulator,accumulator)接下來要介紹的兩個函數(shù)是BYROW和BYCOL,。這些函數(shù)接受一個數(shù)組或區(qū)域,,調(diào)用lambda,并將所有數(shù)據(jù)按每行或列分組,,然后返回一組單個值,。這兩個函數(shù)很好,因為它們允許進(jìn)行以前不可能的計算,,它們會產(chǎn)生數(shù)組,。例如,假設(shè)有一些追蹤一周中每一天的溫度數(shù)據(jù),,想要看到一周平均氣溫高于85華氏度的日子,。如下圖4所示。如果沒有BYROW,,將需要創(chuàng)建一個輔助列,,并使用一組公式計算平均值,然后可能使用篩選或其他一些功能,。使用BYROW,,可以創(chuàng)建一個滿足約束條件的LAMBDA,然后將結(jié)果傳遞給FILTER函數(shù),。=FILTER(表2, BYROW(表2,LAMBDA(week,
AVERAGE(week)>85)))現(xiàn)在,假設(shè)希望看到以攝氏度為單位的數(shù)據(jù),??梢酝ㄟ^使用MAP和CONVERT來包裝我們的調(diào)用,,以攝氏度為單位進(jìn)行快速更新并獲得結(jié)果:=MAP(FILTER(表2, BYROW(表2, LAMBDA(week,
AVERAGE(week)>85))), LAMBDA(value, IF(ISNUMBER(value), CONVERT(value,
'F', 'C'), value)))MAP函數(shù),,通過應(yīng)用lambda創(chuàng)建新值,將數(shù)組中的每個值“映射”到新值,,返回一個數(shù)組,。參數(shù)array1,要映射的數(shù)組,;參數(shù)lambda_or_array,,LAMBDA,必須是最后一個參數(shù),,并且必須為傳遞的每個數(shù)組或要映射的另一個數(shù)組指定一個參數(shù),。LAMBDA參數(shù),array1:從array1中的值,,array2:從添加數(shù)組中的值……,。REDUCE函數(shù),通過對每個值應(yīng)用LAMBDA函數(shù)并在累加器中返回總值,,將數(shù)組縮減為累加值,。參數(shù)initial_value,為累加器設(shè)置開始值,;參數(shù)array,,要縮減的數(shù)組;參數(shù)lambda:被調(diào)用以縮減數(shù)組的LAMBDA,,該LAMBDA接受兩個參數(shù),,累加器和值。LAMBDA參數(shù),,accumulator:從LAMBDA中返回的值,;value:從數(shù)組中的值。SCAN函數(shù),,通過對每個值應(yīng)用LAMBDA掃描數(shù)組,,并返回具有每個中間值的數(shù)組。參數(shù)initial_value:為累加器設(shè)置開始值,;參數(shù)array:用于掃描的數(shù)組,;參數(shù)lambda:被調(diào)用來掃描數(shù)組的LAMBDA。LAMBDA接受兩個參數(shù),,累加器和值,。LAMBDA參數(shù),accumulator:從LAMBDA中返回的值,;value:從數(shù)組中的值,。MAKEARRAY函數(shù),,通過應(yīng)用LAMBDA函數(shù),返回指定行和列大小的計算數(shù)組,。參數(shù)rows:數(shù)組的行數(shù),,必須大于0;參數(shù)cols:數(shù)組的列數(shù),,必須大于0,;參數(shù)lambda:被調(diào)用以創(chuàng)建數(shù)組的LAMBDA,該LAMBDA接受兩個參數(shù),,row_index和column_index。LAMBDA參數(shù),,row_index:行的索引,;column_index:列的索引。BYROW函數(shù),,將LAMBDA應(yīng)用于每一行并返回結(jié)果數(shù)組,。參數(shù)array,按行分隔的數(shù)組,;參數(shù)lambda,,一種將一行作為一個參數(shù)并計算一個結(jié)果的LAMBDA。LAMBDA參數(shù),,value:從數(shù)組中的值,。BYCOL函數(shù),將LAMBDA應(yīng)用于每一列并返回結(jié)果數(shù)組,。參數(shù)array,,按列分隔的數(shù)組;參數(shù)lambda,,一種將列作為單個參數(shù)并計算一個結(jié)果的LAMBDA,。LAMBDA參數(shù),value:從數(shù)組中的值,。ISOMITTED函數(shù),,檢查值是否丟失,并返回TRUE或FALSE,。參數(shù)argument,,想要測試的值,例如LAMBDA參數(shù),。LAMBDA現(xiàn)在支持可選參數(shù),。要使用可選參數(shù),只需將可選參數(shù)名稱放置在“[]”中即可,。例如:=LAMBDA(param1,
[param2], IF(ISOMITTED(param2), param1, param2))如果省略param2,,則此lambda將返回param1的值,,否則返回param2的值。注:本文學(xué)習(xí)整理自微軟官方網(wǎng)站,,供參考,。
|