区间取值的问题,在我们日常工作中经常会遇到,比如:销售提成、等级评定、生产标准核定、绩效考核等等,都属于此类问题,今天就给大家介绍几种常用的方式方法,旨在丰富大家知识面的同时,也可以对函数的应用拓宽一些眼界。
【数据源】先给出今天教学的源数据。建议大家在看后面解决方式之前,先思考一下你会用什么方法处理,会用几种方法处理,然后再来印证。
数据本身没有什么好说的,要求:根据B列的数值,在E列的范围条件中找到对应范围在H列的区间系数,并提取到C列计提系数中。
(本身来说,此类问题更多的是计算计提金额,我们为了更加突出提取系数的函数部分,就省略了此环节,大家记得下面的每个函数再乘以B列数值就可以得到计提金额。)
【附加知识】在给大家解决问题的方式之前,先说一点附加知识。看一下上图中F列的表达方式,在日常工作中,我们看到此类问题的条件描述大部分都会写成E列的格式。但区间的表示方式,规范的写法应该如F列的格式,由两个值组成,以逗号隔开,左边的值为最小值,右边的值为最大值,“[ ]”为包含等于,“( )”为不包含等于。无穷符号是在插入符号中输入,如下。
方法一:IF函数
图例:
C2单元格函数:
=IF(B2>=500,0.1,IF(B2>=300,5%,IF(B2>=150,3%,IF(B2>=50,1%,0))))
函数解析:
对于区间取值的问题,IF函数也许是我们最先想到的方式,也是很多同学用的最多的方式,同时它也确实是最好理解函数原理的一个。但是小函数却有大智慧,对于IF函数,我们要知道多级IF嵌套的运算顺序是从左向右进行的,第一级条件B2>=500为真(TRUE),则返回0.1,为假(FALSE)则进行第二级IF判断B2>=300,为真(TRUE)则返回5%,为假(FALSE)则进行第三级判断条件,以此类推。当某一级条件为真(TRUE)返回某个值后,函数也就不再向后运行。
所以很多同学写错了IF嵌套,就是写错了这个逻辑关系,导致返回值不对。记住这个逻辑关系一定是要么全用>号,从大到小写;要么全用<号,从小到大写!
上图就是全用<号写的IF函数,大家注意到没有,条件中的=号都是包含在次一级跳点区间中的,所以我们在函数中只使用了<号,没有使用=号。
C2单元格函数:
=IF(B2<50,0,IF(B2<150,1%,IF(B2<300,3%,IF(B2<500,5%,10%))))
方法二:VLOOKUP函数
图例:
C2单元格函数:
=VLOOKUP(B2,$G$2:$H$6,2,1)
函数解析:
VLOOKUP函数用于垂直查询,一共有四个参数,前三个我们就不多介绍了,其中第四个参数是模糊查询(TRUE)/精确查询(FALSE)。
VLOOKUP函数是一个使用率很高的函数,再绝大多数的工作环境中我们都可以使用精确查询,但是在区间取值的问题上,必须使用模糊查询。
使用VLOOKUP函数区间取值时,我们的数据源必须像G、H列那样,将数据按照“升序”的方式排列出来。当然我们也可以使用数列,同样数列的输入也须按照升序来写{0,0;50,1%;150,3%;300,5%;500,10%}。数列的问题不是今天的重点,我们以后写数组函数内容的时候再来说它。
方法三:LOOKUP函数
图例:
C2单元格函数:
=LOOKUP(B2,$G$2:$G$6,$H$2:$H$6)
函数解析:
这里我们使用了LOOKUP函数的“向量”用法。即在第一个区域(第2参数)的查询值中,返回第二个区域(第3参数)中对应的值。这个是不是比VLOOKUP函数更好理解呢?同理,和VLOOKUP函数一样,它的数据源也需要升序排列。
当然我们也可以使用LOOKUP函数的数组用法,如下:
LOOKUP函数的数组用法,是在区域的首端找到值,再返回区域末端对应的值。
LOOKUP函数相对于VLOOKUP函数(垂直查询)和HLOOKUP函数(水平查询)来说,倒是显得“全能”了一些,它可以根据行或者列来做今天的区间取值问题,如下图:
【编后语】此篇列出的内容都是常规函数区间取值的解决方法,是日常工作中最常用的方式,无论从学习难度上,还是从办公效率上来讲,大家都应该要熟练的掌握《常规函数篇》列出的内容。