分享

Excel新函数LAMBDA的用法(上)——不用VBA你也能做自定义函数

 Excel教程平台 2024-01-11 发布于四川

  文 前 推 荐   


新函数VALUETOTEXT和ARRAYTOTEXT用法
新函数XMATCH用法
LET,高手最爱函数
带进度预警功能的甘特图制作

编按:

介绍Excel新函数LAMBDA的基本用法,以及如何自定义函数。有了LAMBDA,人人都可以自定义函数,而不需要用VBA。

新函数LAMBDA被誉为Excel函数划时代的突破,有一句不太准确的描述“LAMBDA实现了用公式编程”!

它最被赞誉的两点:

◎用公式完成可重复使用的自定义函数,不需要用VBA,不需要保存为支持宏的文件;

◎用公式完成递归计算,而以往需要用VBA/JavaScript代码才能进行。

1.  作用与语法

LAMBDA函数用于创建可在当前文件中重复使用的自定义函数。

=LAMBDA([参数1,参数2…],计算式)

参数1、参数2等,类似数学方程中设置的未知数X、Y;

计算式就是含参数的计算表达式。

LAMBDA函数的使用比较特殊,主要通过定义名称使用,也可以在单元格中编辑使用。

2.  基本用法

1)在单元格中的临时用法

相比其他函数,LAMBDA在单元格或编辑栏中使用须要加一个尾巴——括起来的参数值或者引用

=LAMBDA(……)(参数值或引用)

譬如将华氏度转成摄氏度。

从物理上我们知道摄氏度=(华氏度-32)*5/9。因此,我们可以设置华氏度温度为X,保留一位小数,那摄氏度就=ROUND(X-32)*5/9,1)。

在B3单元格中输入公式=LAMBDA(X,ROUND((X-32)*5/9,1))(A3)并下拉填充即可得到摄氏度数据。

说明:

公式尾巴(A3)必须有!这个尾巴给出参数X的具体值或者引用。如果没有参数值或引用的尾巴,会出现#CALC!错误。

LAMBDA中的参数最多可以定义253个。下面求圆环面积用到两个参数。

输入公式“=LAMBDA(X,Y,ROUND(PI()*(X^2-Y^2),2))(A12,B12)”并下拉填充。

说明:

PI()指的是圆周率Π。

尾巴(A12,B12),A12是参数X引用单元格,B12是参数Y引用单元格,两者之间用逗号隔开。

LAMBDA在单元格中的运用不但体现不出它的优势“可重复使用的自定义函数”“递归计算”,而且比普通函数使用还多了一个繁琐的尾巴。

因此,这种用法只是用于自定义函数前的测试,测试公式是否正确。

2)在定义名称中使用

下方提取单元格中所有数字,数字之间用逗号分开。

平常,采用兼顾低版本的如下函数公式可以完成提取:

=SUBSTITUTE(TRIM(CONCAT(IF(IFERROR(FIND(MID(A3,ROW($2:$51),1),"-0.123456789"),0),MID(A3,ROW($2:$51),1)," ")))," ",",")

该公式难以理解,并且偏长,如果有多个表需要使用它,即便复制粘贴,也需要来回修改。

我们可以用LAMBDA函数来生成一个自定义函数用于提取。

复制前面的公式,然后单击公式选项卡中“定义名称”。设置名称为“tiqushuzi” (自定义函数的名称最好能传达出其作用,方便使用),公式为“=LAMBDA(字符串,SUBSTITUTE(TRIM(CONCAT(IF(IFERROR(FIND(MID(字符串,ROW(Sheet1!$2:$51),

1),"-0.123456789"),0),MID(字符串,ROW(Sheet1!$2:$51),1)," ")))," ",","))”

确定后,得到一个名为“tiqushuzi”的自定义函数。

该自定义函数既容易理解(新手都能理解),又方便在多表中重复使用——这就是LAMBDA带来的巨大优势之一。

3.   典型应用

1)将复杂的公式定义为自定义函数方便在多表中重复使用

譬如财务做账经常需要将金额转成大写。

如果按平常写公式,很长的:

=TEXT(INT(A17),"[dbnum2]")&"元"&IF(INT(A17*10)-INT(A17)*10=0,"",TEXT(INT(A17*10)-INT(A17)*10,"[dbnum2]")&"角")&IF(INT(A17*100)-INT(A17*10)*10=0,"整",TEXT(INT(A17*100)-INT(A17*10)*10,"[dbnum2]")&"分")

每次输入这么长的公式,很要命呢。

如果用LAMBDA定位为自定义“DAXIE”函数,则使用方便。

说明:

名称中的自定义公式=LAMBDA(金额,TEXT(INT(金额),"[dbnum2]")&"元"&IF(INT(金额*10)-INT(金额)*10=0,"",TEXT(INT(金额*10)-INT(金额)*10,"[dbnum2]")&"角")&IF(INT(金额*100)-INT(金额*10)*10=0,"整",TEXT(INT(金额*100)-INT(金额*10)*10,"[dbnum2]")&"分"))

重要提示和技巧:

自定义的函数只能在当前文件中使用!

如果其他文件需要使用已定义的自定义函数怎么办呢?很简单,从含有自定义函数的文件中复制一个工作表(sheet),空的工作表也行,到其他文件即可。

2)递归运算

如果在定义函数的时候,LAMBDA公式中调用函数本身,则可以实现建立在循环运算上的递归运算。

具体的递归运算我们在下篇文章中介绍,此处只是让大家感受一下。

譬如提取字符串中所有阿拉伯数字(忽略小数点、负号等)可自定以函数“qushu”完成。

在定义名称中输入名称“qushu”,公式LAMBDA(x,IF(x="","",IFERROR(LEFT(x,1)*1,"")&qushu(RIGHT(x,LEN(x)-1))))

然后在表格中使用“qushu”自定义函数即可。

说明:

公式中IF函数的第1和第2参数部分“IF(x="","",”用于设置终止条件。递归运算中必须有循环终止条件。

IF函数的第3参数部分“IFERROR(LEFT(x,1)*1,"")&qushu(RIGHT(x,LEN(x)-1)))”进行循环取数。

4.  总结

本篇介绍了LAMBDA函数的两种基本用法以及如何用它自定义函数。

LAMBDA自定义函数可以在当前文件中像普通函数那样使用,并且不需要保存为支持宏的格式,方便分享使用。如果大家有兴趣和时间,可以将一些与自己工作密切相关的复杂公式都做成自定义函数保存到某个文件中,将大大提高工作效率。

自定义函数不再是VBA高手才能做的事了!

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多