公众号平台最新的推送规则对技术类文章不太友善,如果不想错过干货,请务必 “设为星标”哦!!!
点击上方蓝字 --> 点击“...”--> 选择“设为星标”
学习函数,只掌握其基本语法是远远不够的,还要不断练习,多解题,才能打开思路。
越学习,越会发现学无止境,自己会的那两把刷子,连百宝全书一只角都算不上。
比如 max 函数,它真的就是一个求最大值函数吗?
对于这一点如果有质疑,不妨参阅一下 Excel – 万万没想到,max 函数还能用于二维查询。
很多看过上文的读者都表示:本来以为会的函数,看完后发现不会了。
如果这已经让人感到震惊,那么接下来我要讲解的案例,可能更加刷新三观。
案例:
下图 1 是每个销售当月的获客数和平均客单价,根据以下规则,计算出应得奖金数,结果如下图 2 所示。
根据获客数区间发放奖金:
<3:0
>=3 & <6:3000
>=6 & <9:7200
9:13500
>=10:20000
根据客单价乘以奖金系数:
<=500:100%
>500 & <=1000:80%
>1000 & <=1500:60%
>1500 & <=2000:40%
>2000 & <=3000:20%
>3000:0%
解决方案:
1. 根据需求,我们先分别构建出获客数和客单价两个区间条件表。
看到上面的两个条件查询表,不少同学就明白了,这是要按区间查找,于是想起了最常用的区间查找函数 lookup,类似的案例请参阅 Excel – 用 lookup 函数按区间查找。
还有一些按区间统计的用法,例如:
然而前面说过了,今天的主角是 max 函数,要靠它实现按区间查找。
2. 在 D2 单元格中输入以下公式 --> 按 Ctrl+Shift+Enter 生成数组公式 --> 下拉复制公式:
=MAX((B2>=$F$2:$F$5)*$G$2:$G$5)*MAX((C2<=$I$2:$I$6)*$J$2:$J$6)
公式释义:
这个公式中有两个 max 函数,分别对两个不同的区间进行查询,我依次来解释一下;
MAX((B2>=$F$2:$F$5)*$G$2:$G$5):
B2>=$F$2:$F$5:依次判断 B2 的值是否大于等于 $F$2:$F$5 区域的值,生成一个由逻辑值组成的数组,结果为 {TRUE;FALSE;FALSE;FALSE},true 相当于 1,false 相当于 0;
...*$G$2:$G$5:将上述数组与 G 列的数据区域相乘,只有数组中为 true 的乘积有值,false 的乘积均为 0,结果为 {3000;0;0;0};
MAX(...):用 max 函数取出数组中的最大值,即 3000
MAX((C2<=$I$2:$I$6)*$J$2:$J$6):
C2<=$I$2:$I$6:依次判断 C2 的值是否小于等于 $I$2:$I$6 区域的值,结果为 {FALSE;FALSE;FALSE;FALSE;TRUE};
...*$J$2:$J$6:将数组与 J 列的值相乘,只有 true 值的乘积不为 0;
MAX(...):用 max 函数取出数组中的最大值,即 20%
MAX(...)*MAX(...):将上述两个 max 的结果相乘,得到最后的奖金数 600
无论哪个数组函数中有多个 true 值,也没关系,max 会取结果中的最大值,即最接近的区间所对应的值。
* 参数中的区间都需要绝对引用。
转发、点赞、在看也是爱!