大家好,今天我们来试着解决一下“近似查询”的案例。
如下图所示:
A列B列是各省的销量数据,我们想要在C列对销量数据做一个评价。评价规则是这样的:销量大于等于0小于300时,评价显示“差”;销量大于等于300小于500时,评价显示“一般”;销量大于等于500小于800时,评价显示“良好”;销量大于等于800时,评价显示“优秀”。
以前我们讲解过几种方法。最普通的莫过于IF函数条件判断嵌套法了,但是如果条件太多的话,会嵌套好几层,效率低且思维绕,基础知识掌握不牢的小伙伴会感到非常的头疼。
今天我们尝试使用INDEX搭配MATCH函数解决此类问题。
首先我们先来准备一下评价规则对照表,注意这里有一个前提:查询区域首列,也就是对照表E列的销量值必须以升序排序,否则后面使用函数时就混乱了。如下图所示:
接下来我们在C2单元格输入函数公式:
=MATCH(B2,E$3:E$6)
MATCH函数就是查找值在区域中的位置,结果返回为一个数字。
函数结构:
=MATCH(查找值,查找区域,查找类型)
第1参数是查找值,它可以是一个单元格、文本、数值或引用,甚至可以是一个单元格区域。
第2参数查找区域,是要进行查询的连续的单元格区域,或一个数组及列表。
第3参数查找类型,它包含两种情况3个特定值:
第1种情况是精确查找,参数值为0,即查找列表中完全相同的值的位置;
第2种情况是近似查找,参数值可设置为1或-1,分别表示查找列表中小于或等于查找值的值位置,以及大于或等于查找值的值位置。
MATCH函数前两个参数必须填写,第三个参数可以省略,省略后默认值为1。
本例中MATCH函数省略第3参数,表示在E3:E6这个区域中查找小于或等于B2单元格的最大值,也就是小于等于100的最大值。在E3:E6本区域中,未曾出现过100这个数值,在“0,300,500,800”四个数值中,小于等于100的最大值只有数字“0”了。最后返回数字“0”在“0,300,500,800”中的位置为1。
我们继续在外面嵌套INDEX函数:
=INDEX(F$3:F$6,MATCH(B2,E$3:E$6))
INDEX函数的作用是引用区域中指定行列交叉位置的值。
函数结构:
=INDEX(引用区域,行序号,列序号)
本例中INDEX函数根据上一步中MATCH函数得到的位置1作为第2参数行序号,也就是查询F3:F6中,第1行,第1列(省略第3参数,第1列与F3:F6列重合了)交叉位置的值“差”。