LAMBDA函數,讓EXCEL自定義函數告別VBA

2021-02-14 我隨便寫

一提起自定義函數(UDF),很多表哥表姐想到的Alt+F11打開VBE編輯器,寫一個Function.隨著EXCEL版本的更新,EXCEL也像其它程式語言一樣,推出了表達式函數LAMBDA,通過這個函數加名稱管理器,我們可以在編寫簡短的自定義函數時,不再需要使用VBE窗體。

關於這個函數,微軟的官方連結為https://insider.office.com/blog/lambda-excel-custom-functions

使用些功能,需要為EXCEL2019或Microsoft 365版本,並且加入了預覽體驗計劃。但相信隨著微軟的更新,預計2021年6月份,這個功能會向正式用戶開放。

要查看你的版本信息,點擊左上角的文件選項卡,點擊帳戶,就可以看到。

小灰灰當前用的版本為:

下面用一些例子來說明LAMBDA函數的用法。

簡單用法

假設要寫一個根據圓半徑求圓周長的公式,用數學表達就是f(x)=*3.14*x*x,此時們就來定義這個公式。

打開公式選項卡,點擊定義名稱,或按Ctrl+F3,打開名稱管理器,選擇新建

在名稱中輸入ymj,在引用位置中輸入 =Lambda(x,3.14*x^2),點擊確定按鈕。

我們測試一下,在B2單元格求一下半徑為5的圓面積,輸入=ymj(5),結果為78.5,完全正整。

有朋友會說,這個自定義函數我直接寫公式就可以了,何必這麼麻煩。如果真的這麼簡單,微軟也沒有必要推出這個功能了。在我看來,LAMBDA函數對比普通公式及VBA定義以公式,主要以以下優點:

LAMBDA函數可以實現函數的遞歸調用,也就是函數中調用自身;

LAMBDA函數保存於工作薄中,如果是VBA寫的自定義函數,如果宏安全性設定的較高,則無法運行;如果是加載宏中的自定義函數,換了另一臺電腦,可能就無法打開。

下面我們來看一下LAMBDA函數的神奇用法

求斐波那契數列(簡稱F數列)

在F數列中,存在以下通項公式:F(x)=F(x-1)+F(x-2)。我們可以利用這個性質直接來寫F數列的自定義函數。

新建名稱:fbnq,引用位置填寫:=LAMBDA(x,IF(x<=2,1,fbnq(x-1)+fbnq(x-2)))

測試一下,完全正確。

反轉字符串

反轉字符串為求一個字符串的逆序串,比如輸入good,返回為doog。VBA中有strReverse函數可以實現此功能,但是EXCEL工作表函數中不提供等價函數。

如果知道數組公式,我們可以寫公式 =CONCAT(MID(A1,99-ROW($1:$98),1))

現在我們用自定義函數的方式實現

新建名稱:strRev,引用位置填寫:=LAMBDA(x,IF(LEN(x)=1,x,RIGHT(x)&strRev(LEFT(x,LEN(x)-1))))

對照一下,完全正確。

按特定字符分割字符串

按特定字符分割字符串,在EXCEL中可以用分列的功能來實現,我們寫個函數來實現這個功能。

新建名稱:sp,引用位置填寫:=LAMBDA(x,y,LET(z,FIND(y,x),SWITCH(COLUMN(Sheet1!$A$1:$B$1),1,LEFT(x,z-1),2,MID(x,z+1,99))))

本函數核心在於用SWICT函數構購內存數組,同時使用LET函數,實現函數的簡寫效果。看下效果,以省分割省、市二級行政單位

輸入指定的年份,月份,生成日曆

這個相對比較高級一點的應用。新建名稱:rili,引用位置填寫:=LAMBDA(year,month,LET(x,ROW(Sheet4!$A$1:$G$8),y,COLUMN(Sheet4!$A$1:$G$8),a,DATE(year,month,1),b,DATE(year,month+1,0),c,FLOOR(a,7),d,c+(x-4)*7+y,SWITCH(x,1,MID("日一二三四五六",y,1),2," ",IF((d>=a)*(d<=b),DAY(d)," "))))

看下效果

注意第三例,第四例中需要用到動態數組的自動擴展,需要保證右側沒有單元格被使用,否則會報#SPILL!錯誤。

相關焦點

  • 【VBA自定義函數】315個自定義函數
    166、工齡計算:167、計算日期差,除去星期六、星期日的自定義函數168、這是一個將英文字反轉的自定函數169、關於個人所得稅的170、一個能計算是否有重複單元的函數171、試編寫數字金額轉中文大寫的函數172、人民幣大小寫轉換函數173、獲取區域顏色值自定義函數174、獲取活動工作表名的自定義函數175、顯示在「插入函數」對話框的「或選擇類別」下拉列表中176、複合函數STATFUNCTION177
  • Excel VBA解讀(130): 完善自定義函數的信息
    在圖2中,顯示的是我們自定義的一個名為GetLink的函數,沒有相應的幫助信息。 注意,如果自定義函數是Private限定的私有過程,則不會出現在「插入函數」對話框中。 給自定義函數添加幫助信息下面,我們來為該函數在「插入函數」對話框中添加幫助信息。 首先,單擊「開發工具」選項卡的「代碼」組中的「宏」按鈕,調出「宏」對話框,如下圖3所示。
  • VBA自定義函數
    '1 什麼是自定義函數? '在VBA中有VBA函數,我們還可以調用工作表函數,我們能不能自已編寫函數呢?
  • Python中函數的定義、傳參和lambda函數是什麼?他們有什麼用?
    今天我們來學習函數的定義、傳參和lambda函數。開發工具:IDLE (Python 3.7 64-bit或者32-bit) (註:不需要3.7版本的也行,只需要Python3的版本都可以,在語法方面沒有什麼不同。)
  • 根據顏色求和與計數,好難啊,使用vba自定義函數即可輕鬆搞定
    Hello,今天有粉絲遇到這樣的一個問題,就是老闆給他很多帶有顏色的表格,想讓他根據顏色求和以及計數,他一個一個做了很久也沒做出來,問我有沒有什麼簡單的方法,當然有了,我們覺得最快捷的方法就是使用vba自定義函數來計算,操作也非常的簡單,下面就讓我們來一起操作下吧
  • Python中的lambda函數
    匿名函數是指沒有聲明函數名稱的函數。儘管它們在語法上看起來不同,lambda函數的行為方式與使用def關鍵字聲明的一般函數相同。以下是Python中 lambda函數的特點:在本文中,我們將詳細討論Python中的lambda函數,並演示使用它們的例子。
  • lambda與函數式
    1.3.1 lambda與函數式 在響應式編程中,lambda與函數式的出鏡率相當高,以至於網上經常有朋友直接用「函數響應式編程」用在「響應式編程」的介紹中。從代碼編寫方式上來說,這就可以算作是「函數式」編程範式了,因為我們傳給sort的是一個lambda表達式的形式定義的「函數」,這個「函數」有輸入和輸出,在開發者看起來是赤裸裸的,沒有使用對象封裝起來的。「函數式」編程範式的核心特點之一:函數是"一等公民"。
  • C++中的lambda函數
    作者:  2019信息與計算科學專業   楊澤天lambda函數是C++11中的匿名函數,又叫lambda表達式,叫lambda表達式更好理解,因為函數是不可以在函數中定義的,表達式可以。lambda表達式,可以簡化編程工作。
  • Python匿名函數:Lambda表達式
    我們以一張圖形進入主題:從圖中我們可以看出lambda表達式幾點特徵:簡潔性,符合了Python的一貫宗旨;起到了函數的作用,但未顯示函數名稱,這就是匿名函數;有形參;有返回值的。【2】Lambda表達式如何實現函數功能?
  • Excel現允許用戶通過LAMBDA創建自定義函數
    微軟近日為 Excel 用戶帶來了多項重要功能更新,其中就包括了對自定義數據類型的支持。本文要為大家介紹的,就是已經向 Office Insider 測試者們推送的 LAMBDA 新功能。這項功能仍處於 Beta 測試階段,但感興趣的用戶已可藉助它來創建基於 Excel 公式的自定義函數。然後將之另存為自定義名稱,以便後續重複使用。
  • 【python基礎】python自定義函數五種用法
    Python自定義函數是以def開頭,空一格之後是這個自定義函數的名稱,名稱後面是一對括號,括號裡放置形參列表,結束括號後面一定要有冒號「:」,
  • excel VBA是什麼?VBA編程入門教程
    本篇將介紹excel vba是什麼?vba編程入門教程,有興趣的朋友可以了解一下!一、excel vba是什麼?VBA的英文全稱是Visual Basic for Applications,是一門標準的宏語言。VBA語言不能單獨運行,只能被office軟體(如:Word、Excel等)所調用。
  • 還在嵌套Excel函數?自定義函數到底有多爽?這篇文章讓你相見恨晚!
    今天小北就通過一個簡單案例來分享自定義函數的使用技巧~- 01 -開發者工具&VBA編輯器是的,沒錯,自定義函數就是利用VBA來實現的,在Excel中,數據是存儲在單元格中的,而自定義函數的代碼則是存放在
  • 【Excel分享】if函數的基本用法
    在excel中if函數是最經常用到的判斷函數,通過它可以減少很多繁瑣複雜的工作,判斷單元格內容滿足什麼條件則對應返回相應的值。excel中的if函數是判斷函數,表達的意思是當滿足某條件時,返回一個值,否則返回另一個值語法:if(logical_test,[value_if_true],[value_if_false]) 第1參數:logical_test表示要判斷的條件 第2參數:value_if_true表示當滿足判斷的條件時返回的值 第3參數:value_if_false表示當不滿足判斷的條件時返回的值
  • python之lambda函數使用
    一,lambda函數的概念lambda函數被稱為匿名函數,實際就是說沒有名稱的函數,形式如下:
  • Excel VBA入門教程 1.6 過程和函數
    調用 Sub 過程的是一個獨立的語句,而調用函數過程只是表達式的一部分。另外,自定義函數並不允許修改工作表和單元格格式 (A UDF will only return a value it won't allow you to change the properties of a cell/sheet/workbook. )。
  • excel函數技巧:自定義函數JOINIF函數應用案例
     小奇老師給大家分享的是使用自定義函數JOINIF函數按條件連接文本。下面就一起學習處理字符串的自定義函數——JOINIF函數,先認識一下:函數名:JOINIF作用:對參數範圍中符合指定條件的單元格內容進行連接。參數介紹:第一參數:(必須)條件區域,根據條件計算的單元格區域。第二參數:(必須)用於確定連接的條件。
  • 一文帶你認識 C++ 中的 Lambda 函數
    因為 lambda並不總是函數指針,它一個表達式。但是為了簡單起見,我一直都稱它為函數。那麼在本文中,我將會交替使用lambda函數和表達式來稱呼。Lambda函數是一段簡短的代碼片段,它具有以下特點:(1)不值得命名(無名,匿名,可處理等,無論您如何稱呼)(2)不會重複使用換句話說,它只是語法糖。
  • 詳細講解:python中的lambda與sorted函數
    本文內容主要介紹了python中的lambda與sorted函數的相關資料,幫助大家更好的理解和學習python,感興趣的朋友可以了解下!!!
  • python入門基礎之lambda匿名函數詳解
    python入門基礎之lambda匿名函數詳解剛開始學習python的時候很多人可能對於lambda函數不了解,感覺和def很混亂,下面我來介紹一下lambda函數我從一下幾個方面來介紹lambda:1、lambda簡介2、lambda與def不同之處3、lambda的使用方法