|
自從Excel問世以來,這個(gè)軟件已經(jīng)成了很多人日常工作的一部分。我們使用Excel記錄數(shù)據(jù),進(jìn)行分析,制作報(bào)告,用這些數(shù)據(jù)進(jìn)行日常業(yè)務(wù)決策。功能強(qiáng)大的函數(shù)讓很多人又愛又恨,還有很多人非常希望學(xué)習(xí)但是又望而卻步的VBA,現(xiàn)在,這一切有了新的變化。 對于Excel中的函數(shù),大家已經(jīng)非常熟悉了。即使那些Excel新手,也至少會(huì)用過IF,VLOOKUP等函數(shù),有些人也見過“高手”所寫的公式,往往對這些函數(shù)的無所不能印象深刻。但是,使用的多了,你就會(huì)發(fā)現(xiàn),還是會(huì)有一些問題:
現(xiàn)在好了! 微軟在2020年12月,發(fā)布了一個(gè)新函數(shù): LAMBDA 微軟在Office 365和新版本的Excel中,推出了很多新函數(shù),其中有一些我們在前面的文章中為大家介紹過。這些新函數(shù)功能強(qiáng)大,極大的簡化了很多數(shù)據(jù)處理工作,比如XLOOKUP,F(xiàn)ILTER等等。但是LAMBDA這個(gè)函數(shù)與它們都不一樣。 簡單的說,這個(gè)函數(shù)的作用就是讓你可以定義自己的函數(shù)。 例如,我們可以這樣定義一個(gè)函數(shù): =LAMBDA(x,y,x+y)很容易就會(huì)注意到,這個(gè)函數(shù)與其他Excel函數(shù)不太一樣:
簡單解釋一下: 這個(gè)被定義的函數(shù)的作用就是: 接受兩個(gè)變量:x和y,并且返回它們的和:x+y 很簡單,這個(gè)函數(shù)定義完成了! 但是,如果你像普通函數(shù)一樣,回車完成公式輸入,你會(huì)得到一個(gè)錯(cuò)誤: 這個(gè)#CALC! 就是告訴你,你使用LAMBDA函數(shù)定義了一個(gè)公式,所以,你不能這么使用這個(gè)公式! 正確的使用方式是這樣的: 或者,引用單元格: 結(jié)果為: 是不是有點(diǎn)失望!? 有點(diǎn)意思,但是直接寫公式不行嗎? 這么費(fèi)勁有什么用呢? 其實(shí),這個(gè)函數(shù)還需要結(jié)合“名稱”才能發(fā)揮它的作用。(關(guān)于名稱,你可以參考下面的文章:關(guān)于Excel中的名稱(Name),你需要知道的都在這里了) 在Excel的公式選項(xiàng)卡中,點(diǎn)擊名稱管理器, 打開名稱管理器對話框(也可以通過快捷鍵Ctrl+F3): 點(diǎn)擊“新建”按鈕,新建名稱, 名稱:Add 范圍:工作簿 引用位置:=LAMBDA(x,y,x+y) 點(diǎn)擊確定,完成名稱定義。關(guān)閉名稱管理器。 現(xiàn)在,你有了一個(gè)自己定義的函數(shù):Add,你可以像個(gè)普通Excel函數(shù)一樣使用它:
結(jié)果為:
上面我們使用了一個(gè)簡單的例子說明了LAMBDA的用法。下面我們通過幾個(gè)其他例子看看這個(gè)函數(shù)的好處和作用。 例1,簡化公式——單詞計(jì)數(shù) 這個(gè)例子是數(shù)一數(shù)英文字符串中有多少英文單詞。我們可以使用下面的自定義函數(shù):
其中公式是: =LAMBDA(text, LEN(TRIM(text)) - LEN(SUBSTITUTE(TRIM(text), " ", "")) + 1)函數(shù)可以這么使用:
說明一下: 從這個(gè)例子可以看到,我們可以通過LAMBDA自定義函數(shù)來簡化表格中的函數(shù)。如果不用LAMBDA而直接使用下面的公式的話: =LAMBDA(A1, LEN(TRIM(A1)) - LEN(SUBSTITUTE(TRIM(A1), " ", "")) + 1)也可以得到同樣的結(jié)果,但是,如果要在多個(gè)表格中使用相同的算法處理數(shù)據(jù),就需要分別使用這個(gè)公式。如果你發(fā)現(xiàn)算法錯(cuò)了,想修改的時(shí)候,你就會(huì)發(fā)現(xiàn)這個(gè)工作太煩人了:你需要找到所有的地方,還需要確保每個(gè)地方都修改正確了。而現(xiàn)在,你只需要修改一個(gè)地方就可以了。 例2,不可能完成的任務(wù)-替換不希望出現(xiàn)的字符 這個(gè)例子是根據(jù)你的要求在文本中去掉那些你不希望出現(xiàn)的非法字符。例如:
我們希望去掉那些電話號碼??梢允褂孟旅娴墓剑x一個(gè)名稱: ReplaceChars =LAMBDA(txt,replacetxt,IF(replacetxt="",txt,ReplaceChars(SUBSTITUTE(txt,LEFT(replacetxt,1),""),RIGHT(replacetxt,LEN(replacetxt)-1))))使用這個(gè)函數(shù)可以得到結(jié)果:
同樣的公式可以用于去掉別的非法字符:
說明一下: 仔細(xì)看這個(gè)例子的話,你會(huì)發(fā)現(xiàn)在ReplaceChars函數(shù)的定義中,我們使用了ReplaceChars這個(gè)函數(shù)本身,這是“遞歸調(diào)用”,這個(gè)稍微有點(diǎn)難度,我們會(huì)在以后為大家詳細(xì)介紹這種方法。但是,從這個(gè)例子可以看出,如果不使用LAMBDA函數(shù)的話,很多類似的需求是不可能得到實(shí)現(xiàn)的。你只能借助于VBA,Python,Java Script等等開發(fā)工具來編程序,對于大部分來說太難了。 那么,境界在哪里呢? 下面簡單介紹一下從這個(gè)函數(shù)開始給Excel帶來的一些變化,這些變化很可能會(huì)影響到我們?nèi)粘J褂肊xcel的方式。 注:以下有一些術(shù)語,本身不是很難理解。如果你覺得太枯燥,可以跳過這一部分。 簡單的說,從這個(gè)函數(shù)開始,Excel的函數(shù)體系本身就變成了一種“編程”語言。 是的,你沒有看錯(cuò),Excel本身變成了一種編程語言。 怎么樣,沒想到只是簡單的使用了下Excel,你就變成了“程序猿”了?? 其實(shí),Excel一直是一種編程語言,只不過,以前,這種編程語言是真正的大家熟悉的編程語言:VBA,盡管在真正的程序員圈子里,這個(gè)VBA處于鄙視鏈的最末端了,但是VBA+Excel函數(shù)完全達(dá)到了一個(gè)完善的編程語言的要求:它是圖靈完備的。 注:圖靈完備是一個(gè)計(jì)算機(jī)方面的專業(yè)名詞,經(jīng)常用來評估編程語言。說一個(gè)編程語言是圖靈完備的,就是指這個(gè)語言里的所有規(guī)則可以實(shí)現(xiàn)“圖靈機(jī)”模型中的全部功能。 但是,盡管VBA可以實(shí)現(xiàn)所有的關(guān)于數(shù)據(jù)方面的要求,很多人也想學(xué)習(xí)它。但是對于普通人來說,成功的人并不多。原因很簡單,這畢竟是“硬”編程。其中的各種名詞,規(guī)則,F(xiàn)or(WHILE)循環(huán),IF/ELSE判斷,子程序,數(shù)組,對象等等,光是聽聽就能把人搞暈。 現(xiàn)在好了,不需要VBA了(不是VBA沒用了,而是對普通人處理數(shù)據(jù)的要求來說,可以不用VBA了。)因?yàn)椋由狭薒AMBDA函數(shù)之后的Excel函數(shù)體系,本身就構(gòu)成了一個(gè)圖靈完備的編程語言。 這種語言與VBA,Python,C#,Java等不同,它被稱為“函數(shù)式語言”,顧名思義,這種語言的主體就是各種函數(shù),在這種語言下編程,就是使用各種函數(shù),創(chuàng)建自己的函數(shù),利用函數(shù)返回想要的結(jié)果。 注:其實(shí)不光Excel是這樣的函數(shù)式語言,在Power Query中使用的M語言也是一種函數(shù)式語言,在Power Pivot中使用的DAX,也是一種函數(shù)式語言。 為了增強(qiáng)Excel函數(shù)的功能,微軟還配合LAMBDA函數(shù)推出了一些其他的函數(shù)。我們會(huì)在以后為大家詳細(xì)介紹,也會(huì)結(jié)合實(shí)際的例子,介紹如何使用LAMBDA函數(shù)來解決實(shí)際問題。 另外,值得強(qiáng)調(diào)的是,從Excel這個(gè)函數(shù)體系的增強(qiáng),加上Power Query和Power Pivot等功能的成熟,Excel真正變成了“Power” Excel,這個(gè)“Power” Excel可以讓我們在現(xiàn)在這個(gè)對大數(shù)據(jù)已經(jīng)深入到日常生活和工作的各種場景中對數(shù)據(jù)的處理更加的方便,但同時(shí)也對我們提出了更高的要求。 深入學(xué)習(xí)“Power Excel”,成為一個(gè)另類的”程序猿“吧?? 注:現(xiàn)在LAMBDA函數(shù)還沒有正式發(fā)布,只有Office Insider Program的用戶可以使用。這是網(wǎng)上搜到的加入這個(gè)項(xiàng)目的方法:https://cloud.tencent.com/developer/news/222433 另外,從微軟自己的表示看,他們對現(xiàn)在使用名稱來定義自定義函數(shù)感到不滿意,主要是名稱對話框只是一個(gè)單行的文本框,”編程“的體驗(yàn)非常不好,他們希望能夠有所改進(jìn)。期望正式推出的時(shí)候可以有新的體驗(yàn)了。 ·end· |
|
|