本帖最后由 lgcmeli 于 2020-9-20 16:47 编辑
LET(名称n,名称值n,......,包含名称的计算表达式)
-名称,指的就是定义名称,可以是中文可以是字母等 -名称值,可以是单元格,可以是单元格区域,可以是函数公式等 -表达式,必须包含LET里已定义的一个或若干名称的函数公式等
这种LET语法相当于在LET内部进行变量命名并编程的感觉
看起来似乎不好懂。 咱们举例说明。
1、比如根据城市名和月份,查询其销量 如下图
D13单元格
=LET(city,B3:B11, mon,C2:H2, INDEX(C3:H11,MATCH(B13,city,),MATCH(C13,mon,0)))
也可以写成这样: =LET(city,MATCH(B13,B3:B11,), mon,MATCH(C13,C2:H2,0), INDEX(C3:H11,city,mon))
不过你似乎想说,这么干不是更复杂吗 原本只需要这样就可以解决问题了 =INDEX(C3:H11,MATCH(B13,B3:B11,),MATCH(C13,C2:H2,))
为什么要在LET函数里先定义名称, 再把这个名称给其他的函数公式去调用呢 其实这体现了一种编程思维 即时定义名称,即时被函数公式使用,提高效率,用完就走 当前LET里定义的名称,只能在当前LET函数里被使用
2、再看一个例子 右侧已经统计出每个人每个城市的销售金额之和 但现在要求根据公司给定的提成标准 分别计算出每个城市每个人应计提的奖金是多少 如果要你直接在H2单元格里写出公式计算出提成奖金, 你该怎么写公式?
=SUMIFS($D:$D,$B:$B,$G2,$C:$C,H$1)*IF(SUMIFS($D:$D,$B:$B,$G2,$C:$C,H$1)>=100000,10%,IF(SUMIFS($D:$D,$B:$B,$G2,$C:$C,H$1)>50000,8%,IF(SUMIFS($D:$D,$B:$B,$G2,$C:$C,H$1)>30000,5%,IF(SUMIFS($D:$D,$B:$B,$G2,$C:$C,H$1)>10000,3%,1%))))
看起来其实比较复杂 主要在于IF的多层嵌套里SUMIFS函数在不断被使用
那么,我们可以写得简单一点吗。 当然可以的。 以前的版本可以提前在名称管理器里定义名称 但是定义起来相对有一些要求 而现在365版本就简单多了
=LET(x,SUMIFS($D:$D,$B:$B,$G2,$C:$C,H$1), x*IF(x>=100000,10%,IF(x>50000,8%,IF(x>30000,5%,IF(x>10000,3%,1%)))))
如果你把IF改成IFS就跟简单了
=LET(x,SUMIFS($D:$D,$B:$B,$G20,$C:$C,H$1), x*IFS(x>=100000,10%,x>50000,8%,x>30000,5%,x>10000,3%,x>=0,1%))
或者把IF改成VLOOKUP近似查询 那么公式又改成这样:
=LET(和,SUMIFS($D:$D,$B:$B,$G2,$C:$C,H$1), 和*VLOOKUP(和,$T$1:$U$5,2,1)) 或者 =LET(和,SUMIFS($D:$D,$B:$B,$G2,$C:$C,H$1), 和*VLOOKUP(和, {0,0.01;10000.00001,0.03;30000.00001,0.05;50000.00001,0.08;100000,0.1},2,1))
|