微软MS365 Excel中的两个新函数LET和LAMBDA函数横空出世,使得Excel在数据处理方面的能力更加出色。
以前对于一些复杂的计算,我们需要很长的或者是很复杂的公式才能完成,有些统计甚至要用VBA自定义函数才能完成,可并不是人人都会VBA。
有了LET和LAMBDA函数后,用户自定义函数就变的简单了,学会这两个函数,人人都可以成为程序员。
今天我们先来学习下LET函数。
这个函数到底有什么作用呢?值不值得我们学习呢?
下面我们来了解下LET函数。
函数作用(官方解释):
LET 函数会向计算结果分配名称。这样就可存储中间计算、值或定义公式中的名称。这些名称仅可在 LET 函数范围内使用。与编程中的变量类似,LET 是通过 Excel 的本机公式语法实现的。
要使用 LET 函数,需定义名称/关联值对,再定义一个使用所有这些项的计算。必须至少定义一个名称/值对(变量),LET 最多支持 126 个对。
看官方这个解释,你可能会觉得云里雾里,即使看懂了,也未必能领会其真正的作用。
下面我们通过实际的案例来学习下这个函数具体的用法:
例子也来源于官网:
从左边的数据中筛选出销售代表为“何石”的数据,F2中的公式为:
=IF( ISBLANK(FILTER(A2:D8,A2:A8="何石")) , "-" ,
FILTER(A2:D8,A2:A8="何石") )
用了一个IF嵌套公式,当提取出来的值为空时,显示“-”,否则显示提取出来的值。
大家注意,以上公式中我们重复写了一次FILTER(A2:D8,A2:A8="何石")。
如果用LET函数,该怎么写呢?官方的写法是:
=LET( filterCriteria , "何石" , filteredRange ,
FILTER(A2:D8,A2:A8=filterCriteria) , IF(ISBLANK(filteredRange),"-", filteredRange) )
很多人会觉得莫名其妙,这不是增加了公式的复杂度吗?
乍一看,好像公式确实变长了,我们先别理会公式的长短,先来理解下公式是什么意思。
上面的公式类似于:
LET(x,1,y,1,x+y)
即我想计算x+y的值是多少,现在告诉x+y这个公式,x为1,y为1,然后让x+y这个公式求取结果。
=LET( filterCriteria , "何石" , filteredRange ,
FILTER(A2:D8,A2:A8=filterCriteria) , IF(ISBLANK(filteredRange),"-", filteredRange) )
本来我想用
=IF( ISBLANK(FILTER(A2:D8,A2:A8="何石")) , "-" ,
FILTER(A2:D8,A2:A8="何石") )
这个公式去求结果,但是上面的公式中 FILTER(A2:D8,A2:A8="何石")写了两次,也就意味此公式在计算时 FILTER(A2:D8,A2:A8="何石") 这一部分要计算两次,这样就会造成计算的浪费,如果公式中的相同部分只需要计算一次就好了,LET函数就是为此而生。
既然公式中重复部分只计算一次,但是此结果还想要再次使用,是不是应该把计算出来的结果临时赋值给一个变量呢?
所以下面的公式中:
=LET( filterCriteria , "何石" , filteredRange ,
FILTER(A2:D8,A2:A8=filterCriteria) , IF(ISBLANK(filteredRange),"-", filteredRange) )
有两个变量:
变量1: filterCriteria ,其值指定为了“何石”。
变量2: filteredRange ,其值为公式 FILTER(A2:D8,A2:A8=filterCriteria) 的结果。
计算结果的公式为:
IF(ISBLANK(filteredRange),"-", filteredRange)
这样上面的公式是不是一目了然了呢?
下面我把公式进一步简化下,大家会看得更加明白。
先来看下思路:
如果 FILTER(A2:D8,A2:A8=filterCriteria) 的结果为空,返回“-”,否则返回公式的结果,
所以我把
FILTER(A2:D8,A2:A8=filterCriteria)
的结果赋给一个叫“结果”的变量,那公式就可以写为:
=LET( 结果 , FILTER(A2:D8,A2:A8="何石") , IF(结果="","-",结果) )
相比
=IF( ISBLANK(FILTER(A2:D8,A2:A8="何石")) , "-" ,
FILTER(A2:D8,A2:A8="何石") )
是不是简化了公式,最主要是提升了公式的计算效率。
当然变量名字可以更加简单点,公式可以写为:
=LET( x , FILTER(A2:D8,A2:A8="何石") , IF(x="","-",x) )
这样看是不是更爽了呢?
这让我想起来以前讲过的一个案例:
H2中是我原来写的一个公式:
=SUM(INDIRECT(MAX(IF(A1:F13<>"",ROW(1:13),0))&":"&MAX(IF(A1:F13<>"",ROW(1:13),0))))
大家可以看出
MAX(IF(A1:F13<>"",ROW(1:13),0)
这一个部分重复写了两次,那时也没有其他办法,只能重复写了,有了LET函数之后,公式可以简化为:
=LET(x,MAX(IF(A1:F13<>"",ROW(1:13),0)),SUM(INDIRECT(x&":"&x)))
讲到现在大家应该知道LET函数的作用了吧,其实就是当你的公式中有些区域或是名称再或者是公式的一部分需要重复出现时,就用LET函数,它可以把这些区域、名称、公式的一部分存储在一个变量中,然后在你真正的公式中直接调用这些变量就可以了,类似于在VBA中声明变量,在过程中就可以直接调用变量。
对于LET函数来说目的有二:
1、简化公式。
2、提高公式的计算效率。
所以,学习函数不需要死记硬背,要明白函数的本质作用,忘了语法没关系,使用时回头看下就行,当然这需要建立在你有一定的函数基础之上,否则一切都是白搭。
有话要说...