告别复杂嵌套,用LET函数写出更优雅的Excel公式!

我们经常遇到在写公式时,某个计算结果需要重复被调用,例如说if函数,通过各科成绩判断“学生平均分”属于什么等级,如下公式,就会多次来计算平均值进行比较。

这很显然会导致计算出现重复,在数据量级大的情况下会影响运算效率。那本期的let函数就可以帮我们解决这个问题。

语法

我们先来了解下LET函数的语法:

=LET(name1, value1, [name2/value2], ..., calculation)

参数:

name1、name2 :自定义变量名称;

value1、value2:为变量的赋值;

calculation:最终的计算公式(输出结果就是此公式的结算结果)

先来举个简单的例子:

=LET(x,1+5,x+1:我们设定变量x,为其赋值是“1+5”,即x=6。输出的结果是x+1=6-1=7。所以结果就是如下图中的值。

使用示例

那么还是回到文章开始的这个场景,如何让平均值只计算一次。我们代入let函数。可以先设定一个变量x为平均值,后续直接调取x变量的结果即可。

因此可以修改为下面的公式:

=LET(x,AVERAGE(B2:G2),
   IFS(x>=90,"优秀",x>=80,"良好",x>=60,"合格",x<=60,"不及格")
     )

修改后,不仅避免了多次重复计算,公式的可读性也提升了不少!

到这里估计你已经基本掌握let函数的用法了,接下来我们再介绍几个实用场景,以融会贯通。

场景1:修改文本格式

例如我们需要将手机号“13973120000”转换为“139-7312-0000”,我们也可以使用let函数实现。

=LET(x,LEFT(L2,3),
     y,MID(L2,4,4),
     z,RIGHT(L2,4),
     TEXTJOIN("-",,x,y,z)
     )

场景2:自动生成报表数据

如下可自动生成日报数据:

=LET(x,SUM(出库记录表!H9:H10163),
     y,SUM(入库记录表!H9:H206),
     z,SUM(产品及库存!H9:H259),
     "当前总出库量:"&x&";当前总入库量"&y&";当前库存总量"&z
     )

场景3:数据筛选合并

如需要合并以下4个sheet中,员工工资大于1w的员工姓名和工资。我们可以使用下面公式实现:

=CHOOSECOLS(FILTER(VSTACK(销售部!A1:D17,行政部:生产部!A2:D17),VSTACK(销售部!A1:A17,行政部:生产部!D2:D17)>10000),2,4)

但这个公式出现2次重复计算,因此我们使用let函数即可避免。

=LET(
x,VSTACK(销售部!A1:D17,行政部:生产部!A2:D17),
FILTER(CHOOSECOLS(x,2,4),CHOOSECOLS(x,4)>10000)
)

从以上案例可以看出,即使不用LET函数也是可以实现目的,且LET函数并没有减少公式长度。但也发现我们使用LET函数之后,可以分步处理数据,让逻辑一目了然,并能有效减少重复计算,也便于后续维护。相比冗长的函数更具有可读性。

但使用LET函数的时候需要注意,定义的变量仅能在本公式中使用,不能用于其他公式;同时变量名不能使用sum/if等与函数名冲突的名称。