分享

这个新函数,让Excel进入了一个新的境界

 ExcelEasy 2022-01-04

自从Excel问世以来,这个软件已经成了很多人日常工作的一部分。我们使用Excel记录数据,进行分析,制作报告,用这些数据进行日常业务决策。功能强大的函数让很多人又爱又恨,还有很多人非常希望学习但是又望而却步的VBA,现在,这一切有了新的变化。




对于Excel中的函数,大家已经非常熟悉了。即使那些Excel新手,也至少会用过IF,VLOOKUP等函数,有些人也见过“高手”所写的公式,往往对这些函数的无所不能印象深刻。但是,使用的多了,你就会发现,还是会有一些问题:

  1. 公式使用多了以后,维护起来特别麻烦。尤其是一个函数出现在多个不同的位置,要修改就必须找全了,否则就会出错。导致每次修改都提心吊胆的。

  2. 有很多问题用现有的函数解决不了。很多人遇到这种问题,往往会产生学些“VBA”的欲望,但是想想那些代码,规则,逻辑,就会被劝退了。确实,对于大部分Excel使用者来说,写程序太难了。

现在好了!

微软在2020年12月,发布了一个新函数:

LAMBDA

微软在Office 365和新版本的Excel中,推出了很多新函数,其中有一些我们在前面的文章中为大家介绍过。这些新函数功能强大,极大的简化了很多数据处理工作,比如XLOOKUP,FILTER等等。但是LAMBDA这个函数与它们都不一样。

简单的说,这个函数的作用就是让你可以定义自己的函数。

例如,我们可以这样定义一个函数:

=LAMBDA(x,y,x+y)

很容易就会注意到,这个函数与其他Excel函数不太一样:

  • 这个函数的参数并不是单元格引用,也不是常量,而是“x”,“y”这样的变量。

简单解释一下:

这个被定义的函数的作用就是:

接受两个变量:x和y,并且返回它们的和:x+y

很简单,这个函数定义完成了!

但是,如果你像普通函数一样,回车完成公式输入,你会得到一个错误:

这个#CALC!

就是告诉你,你使用LAMBDA函数定义了一个公式,所以,你不能这么使用这个公式!

正确的使用方式是这样的:

你需要将整个LAMBDA公式:LAMBDA(x,y,x+y)作为一个整体,像一个普通函数一样,后面加括号,写参数,2和3,结果就是:

或者,引用单元格:

结果为:

是不是有点失望!?

有点意思,但是直接写公式不行吗?

这么费劲有什么用呢?

其实,这个函数还需要结合“名称”才能发挥它的作用。(关于名称,你可以参考下面的文章:关于Excel中的名称(Name),你需要知道的都在这里了

在Excel的公式选项卡中,点击名称管理器,

打开名称管理器对话框(也可以通过快捷键Ctrl+F3):

点击“新建”按钮,新建名称,

名称:Add

范围:工作簿

引用位置:=LAMBDA(x,y,x+y)

点击确定,完成名称定义。关闭名称管理器。

现在,你有了一个自己定义的函数:Add,你可以像个普通Excel函数一样使用它:

结果为:

上面我们使用了一个简单的例子说明了LAMBDA的用法。下面我们通过几个其他例子看看这个函数的好处和作用。

例1,简化公式——单词计数

这个例子是数一数英文字符串中有多少英文单词。我们可以使用下面的自定义函数:

其中公式是:

=LAMBDA(text, LEN(TRIM(text)) - LEN(SUBSTITUTE(TRIM(text), " ", "")) + 1)

函数可以这么使用:

说明一下:

从这个例子可以看到,我们可以通过LAMBDA自定义函数来简化表格中的函数。如果不用LAMBDA而直接使用下面的公式的话:

=LAMBDA(A1, LEN(TRIM(A1)) - LEN(SUBSTITUTE(TRIM(A1), " ", "")) + 1)

也可以得到同样的结果,但是,如果要在多个表格中使用相同的算法处理数据,就需要分别使用这个公式。如果你发现算法错了,想修改的时候,你就会发现这个工作太烦人了:你需要找到所有的地方,还需要确保每个地方都修改正确了。而现在,你只需要修改一个地方就可以了。

例2,不可能完成的任务-替换不希望出现的字符

这个例子是根据你的要求在文本中去掉那些你不希望出现的非法字符。例如:

我们希望去掉那些电话号码。可以使用下面的公式,定义一个名称:

ReplaceChars

=LAMBDA(txt,replacetxt,IF(replacetxt="",txt,ReplaceChars(SUBSTITUTE(txt,LEFT(replacetxt,1),""),RIGHT(replacetxt,LEN(replacetxt)-1))))

使用这个函数可以得到结果:

同样的公式可以用于去掉别的非法字符:

说明一下:

仔细看这个例子的话,你会发现在ReplaceChars函数的定义中,我们使用了ReplaceChars这个函数本身,这是“递归调用”,这个稍微有点难度,我们会在以后为大家详细介绍这种方法。但是,从这个例子可以看出,如果不使用LAMBDA函数的话,很多类似的需求是不可能得到实现的。你只能借助于VBA,Python,Java Script等等开发工具来编程序,对于大部分来说太难了。

那么,境界在哪里呢?

下面简单介绍一下从这个函数开始给Excel带来的一些变化,这些变化很可能会影响到我们日常使用Excel的方式。

注:以下有一些术语,本身不是很难理解。如果你觉得太枯燥,可以跳过这一部分。

简单的说,从这个函数开始,Excel的函数体系本身就变成了一种“编程”语言。

是的,你没有看错,Excel本身变成了一种编程语言。

怎么样,没想到只是简单的使用了下Excel,你就变成了“程序猿”了😀

其实,Excel一直是一种编程语言,只不过,以前,这种编程语言是真正的大家熟悉的编程语言:VBA,尽管在真正的程序员圈子里,这个VBA处于鄙视链的最末端了,但是VBA+Excel函数完全达到了一个完善的编程语言的要求:它是图灵完备的。

注:图灵完备是一个计算机方面的专业名词,经常用来评估编程语言。说一个编程语言是图灵完备的,就是指这个语言里的所有规则可以实现“图灵机”模型中的全部功能。

但是,尽管VBA可以实现所有的关于数据方面的要求,很多人也想学习它。但是对于普通人来说,成功的人并不多。原因很简单,这毕竟是“硬”编程。其中的各种名词,规则,For(WHILE)循环,IF/ELSE判断,子程序,数组,对象等等,光是听听就能把人搞晕。

现在好了,不需要VBA了(不是VBA没用了,而是对普通人处理数据的要求来说,可以不用VBA了。)因为,加上了LAMBDA函数之后的Excel函数体系,本身就构成了一个图灵完备的编程语言。

这种语言与VBA,Python,C#,Java等不同,它被称为“函数式语言”,顾名思义,这种语言的主体就是各种函数,在这种语言下编程,就是使用各种函数,创建自己的函数,利用函数返回想要的结果。

注:其实不光Excel是这样的函数式语言,在Power Query中使用的M语言也是一种函数式语言,在Power Pivot中使用的DAX,也是一种函数式语言。

为了增强Excel函数的功能,微软还配合LAMBDA函数推出了一些其他的函数。我们会在以后为大家详细介绍,也会结合实际的例子,介绍如何使用LAMBDA函数来解决实际问题。

另外,值得强调的是,从Excel这个函数体系的增强,加上Power Query和Power Pivot等功能的成熟,Excel真正变成了“Power” Excel,这个“Power” Excel可以让我们在现在这个对大数据已经深入到日常生活和工作的各种场景中对数据的处理更加的方便,但同时也对我们提出了更高的要求。

深入学习“Power Excel”,成为一个另类的”程序猿“吧😀

注:现在LAMBDA函数还没有正式发布,只有Office Insider Program的用户可以使用。这是网上搜到的加入这个项目的方法:https://cloud.tencent.com/developer/news/222433

另外,从微软自己的表示看,他们对现在使用名称来定义自定义函数感到不满意,主要是名称对话框只是一个单行的文本框,”编程“的体验非常不好,他们希望能够有所改进。期望正式推出的时候可以有新的体验了。


·end·

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多