比if短多了!text按阶梯分段求和,你会吗?
分段求订单总提成
下图左表记录的是员工的月完成订单量,现在要计算每个员工的提成。提成是根据右表来计算的。
当月完成单量小于等于200单时,每单提成4元;超出200单但又小于等于500单的部分,每单提成7元;超出500单的部分,每单提成8元。
这个题目如果让你做,你会怎么做呢?你可能想到用if来完成。
如果月完成单量小于等于200,那么就是月完成单量*4。
如果月完成单量大于200且小于等于500,那么就是(月完成单量-200)*7+200*4。
如果月完成单量大于500,那么就是(月完成单量-500)*8+300*7+200*4。
=IF(B3<=200,B3*4,IF(B3<=500,(B3-200)*7+200*4,(B3-500)*8+200*4+300*7))
=SUM(TEXT(B3-{0;200;500},"[<]!0")*{4;3;1})
这个公式的思路是前一阶段的提成包含了后一阶段的部分提成,只需补上后一阶段剩余部分的提成就可以了。这么说你可能还是理解不了。下面举例说明一下。
比如月完成单量是300,300-{0;200;500}的结果是{300;100;-200}。TEXT({300;100;-200},"[<]!0")的结果是{"300";"100";"0"}。text第2参数的意思是如果第1参数小于0,强制显示为0。所以-200就变为0。
接下来用text的结果{"300";"100";"0"}*{4;3;1}得到{1200;300;0},最后用sum求和得到1500。和200*4+100*7的结果是一样的。
其中{4;3;1}是怎么得到的呢?第1元素4是由4-0得到的,第2元素3是由7-4得到的,第3个元素1是由8-7得到的。也就是用下一个提成减上一个提成。
https://pan.baidu.com/s/1gtMq8EAmdSFi65xXF0h4uA