日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Excel竟然還可以創(chuàng)建這樣的函數(shù):FUNCTION(x)(data)

 zonge 2025-02-25

今天介紹嵌套LAMBDA函數(shù)的使用。

LAMBDA函數(shù)的語法如下:

=LAMBDA([parameter1, parameter2, …,] calculation)

其中的parameter是參數(shù),可以是數(shù)組,單元格區(qū)域,數(shù)值,或者LAMBDA函數(shù)。

最后的calculation也可以是LAMBDA函數(shù)。如果是這樣,我們就使用了嵌套的LAMBDA函數(shù)。

例如,

 TESTFUNC = LAMBDA(x, LAMBDA(a, a + x))

就是一個(gè)嵌套的LAMBDA函數(shù)。

TESTFUNC的邏輯非常簡(jiǎn)單,一眼就可以明白它要什么。但是要分析其運(yùn)行過程卻并不是一目了然的。

其使用邏輯可以用下圖表示:

圖片

對(duì)這個(gè)函數(shù)的調(diào)用使用公式:

=TESTFUNC(x)

x被作為參數(shù)傳遞給外層的LAMBDA函數(shù),外層的LAMBDA函數(shù)需要根據(jù)計(jì)算邏輯處理并返回。這個(gè)計(jì)算邏輯就是內(nèi)層的LAMBDA函數(shù):

=LAMBDA(a, a+X)

這里的a是參數(shù),x不再是參數(shù)。x是外層LAMBDA函數(shù)傳遞進(jìn)來的,對(duì)內(nèi)層LAMBDA函數(shù)來說,相當(dāng)于常量。

內(nèi)層的LAMBDA函數(shù)需要根據(jù)計(jì)算邏輯返回,這個(gè)計(jì)算邏輯就是:

a+x
嵌套LAMBDA函數(shù)的調(diào)用

這個(gè)函數(shù)并不能像以前我們創(chuàng)建過的自定義函數(shù)一樣調(diào)用。

注意,外層的LAMBDA函數(shù)只能接收一個(gè)參數(shù),所以,只能寫成:

=TEXTFUNC(10)

根據(jù)上面的分析,這個(gè)公式返回了一個(gè)LAMBDA函數(shù):

LAMBDA(a,a+x)

顯然,此時(shí)x=10,因此,這個(gè)LAMBDA函數(shù)變成了:

LAMBDA(a, a+10)

這個(gè)函數(shù)是需要輸入?yún)?shù)的,比如:

LAMBDA(a, a+10)(5)

結(jié)果就是15。

綜合上面的過程,TESTFUNC應(yīng)該用如下形式調(diào)用:

=TESTFUNC(10)(5)

其中第一個(gè)括號(hào)內(nèi)是外層LAMBDA函數(shù)的參數(shù),第二個(gè)括號(hào)中是內(nèi)層LAMBDA函數(shù)的參數(shù)。

等價(jià)形式

仔細(xì)想一下,就會(huì)發(fā)現(xiàn),上面的TESTFUNC完全可以用如下的代碼創(chuàng)建:

TESTFUNC1 = LAMBDA(x, a, a + x)

從計(jì)算邏輯上來說,二者完全等價(jià)。只是調(diào)用方式不同。TESTFUNC1用普通的方式調(diào)用即可:

=TESTFUNC1(10, 5)

那么我們?yōu)槭裁催€有使用嵌套的形式呢?

實(shí)際上,大部分場(chǎng)景中,我們都不建議寫成嵌套的調(diào)用,尤其是多層嵌套。不過,在某些場(chǎng)景中,這么做可以得到一些好處。

語義上的好處

其實(shí),大部分好處都是“語義”上的。

比如,Excel中有一個(gè)TEXTSPLIT函數(shù),是通過分隔符對(duì)文本進(jìn)行拆分,假設(shè)你遇到這樣一個(gè)公式:

=TEXTSPLIT(A3, B3)

如果你不是對(duì)這個(gè)函數(shù)非常熟悉的話,你一定很困惑A3和B3哪一個(gè)是要拆分的文本,哪一個(gè)是分隔符。

但是,假如有這樣一個(gè)公式:

=TEXTSPLITBY(B3(A3)

注意,這里的函數(shù)的第一部分是:

TEXTSPLITBY(B3)

完全可以翻譯成“根據(jù)B3拆分文本”,

那么整個(gè)公式就是:

“根據(jù)B3拆分文本:A3”

這樣的公式調(diào)用可讀性更強(qiáng),可維護(hù)性也更好一些。尤其是數(shù)據(jù)處理邏輯比較復(fù)雜的時(shí)候。

實(shí)際上,我們就是將這個(gè)處理邏輯中的參數(shù)分為兩部分:

一組是需要直接進(jìn)行處理的數(shù)據(jù),另外一組是處理過程中的參數(shù)。

下面的例子中,我們創(chuàng)建了一個(gè)公式,可以根據(jù)需要使用不同的統(tǒng)計(jì)方式:

STATISTICSFOR = LAMBDA(type,    
       LAMBDA(data,        
           SWITCH(            
           type,            
           "sum", SUM(data),            
           "count", COUNT(data),            
           "average", AVERAGE(data),            
           "median", MEDIAN(data),            
           "max", MAX(data),            
           "min", MIN(data)        
         )    
      )
 );

下面是這個(gè)函數(shù)的調(diào)用實(shí)例:

=STATISTICSFOR("SUM")(A1:A10)=STATISTICSFOR("average")(A1:A10)

很明顯,分別是對(duì)A1:A10區(qū)域的求和和求平均值。

這個(gè)功能經(jīng)常和其他自定義函數(shù)結(jié)合在一起使用:

ADDONE = LAMBDA(a, a + 1);
ADDTWO = LAMBDA(a, a + 2);
MYFUNCTION = LAMBDA(fn, LAMBDA(data, fn(data)));

其中,

ADDONE,ADDTWO是兩個(gè)自定義函數(shù),代表了不同的計(jì)算邏輯。

MYFUNCTION則根據(jù)選擇的不同函數(shù),實(shí)現(xiàn)不同的計(jì)算邏輯:

=MYFUNCTION(ADDONE)(A1:A10)

詳細(xì)解釋請(qǐng)看視頻

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多