问题求助SOS:两个条件都需要放在数字区间里面进行查询,并返回值,这样的多条件查询应该怎么办?
小编想说,这个案例实在是太太太经典了。
如下图所示:
A1:D4是数据源区域,也是我们的查询区域。列标题包含3个数字区间,行标题包含3个数字区间。
我们想要通过F2单元格的条件1(与列标题数字区间对应)与G2单元格的条件2(与行标题数字区间对应),这两个条件找到A1:D4数据源二维值区域的对应值。比如“7”位于数据源的第C列(5-10区间),“1.5”位于数据源的第3行(1-2区间),那么C列与第3行的交叉位置对应值为“E”。
两个条件均不含负值。
遇到这样的问题,你是不是还在傻傻的嵌套IF函数,不得搞个10层8层的,还自我感觉自己函数运用能力超级强,其实这种做法大错特错了。运用这种方法,不仅不能体现自己的技术高,还会被其他同事嘲笑不会“偷懒”找巧法。
要远离IF多层嵌套,遇到数字区间里的多条件查询,一定要用frequency函数。
FREQUENCY函数用于计算数值在指定区间内的出现频数,然后返回一个垂直数组。
常规语法:
FREQUENCY(一组数值,指定的间隔值)
FREQUENCY函数将第一参数中的数值以第二参数指定的间隔进行分组,计算数值在各个区间内出现的频数。最终返回的数组中的元素会比间隔值的元素多一个,多出来的这个表示最高区间之上的数值个数。
下面我们用一下就知道其中的奥秘了。
第一步:确定条件1位置
运用本例中强力推荐的FREQUENCY函数:
=FREQUENCY(F2,{-1,5,10,15})
{-1,5,10,15} 以4个间隔分成5组区间:
x≤-1
-1<x≤5
5<x≤10
10<x≤15
15<x
这里之所以以最小的起点以-1开始,是为了让0值,包含在第二组-1<x≤5
(0-5)之内。因为两个条件均不含负值,所以不用考虑负数情况。
产生了纵向的频数分布:
{0;0;1;0;0}
条件1:“7”只在5<x≤10(5-10)这个分段内出现了1次,故频数返回1,在其余的分段中均为出现过,故都是频数0。
用TRANSPOSE函数:
=TRANSPOSE(FREQUENCY(F2,{-1,5,10,15}))
将返回结果转置为横向的,更容易对比A1:D1区域观察理解,此步骤可省略。
使用MATCH查找函数:
=MATCH(1,TRANSPOSE(FREQUENCY(F2,{-1,5,10,15})),0)
查找固定值“1”,在上一步返回数组中{0;0;1;0;0}的位置为“3”。
我们可以理解为:
条件1:“7”,位于查询区域A1:D4区域的第“3”列。
第二步:确定条件2位置
原理与步骤1相同。
使用FREQUENCY函数:
=FREQUENCY(G2,{-1,1,2,3})
{-1,1,2,3} 以4个间隔分成5组区间:
x≤-1
-1<x≤1
1<x≤2
2<x≤3
3<x
这里之所以最小的起点以-1开始,是为了让0值,包含在第二组-1<x≤1
(0-1)之内。因为两个条件均不含负值,所以不用考虑负数情况。
产生了纵向的频数分布:
{0;0;1;0;0}
条件2:“1.5”只在1<x≤2(1-2)这个分段内出现了1次,故频数返回1,在其余的分段中均为出现过,故都是频数0。
利用MATCH函数查找:
=MATCH(1,FREQUENCY(G2,{-1,1,2,3}),0)
查找固定值“1”,在上一步返回数组中{0;0;1;0;0}的位置为“3”。
我们可以理解为:
条件2:“1.5”,位于查询区域A1:D4区域的第“3”行。
第三步:交叉查询
我们只需要确定A1:D4区域中的第3行与第3列交叉位置的值“E”就可以了,所以使用INDEX函数交叉查询:
=INDEX(A1:D4,MATCH(1,FREQUENCY(G2,{-1,1,2,3}),0),MATCH(1,TRANSPOSE(FREQUENCY(F2,{-1,5,10,15})),0))
A1:D4:为查询区域。
MATCH(1,FREQUENCY(G2,{-1,1,2,3}),0):为第3行。
MATCH(1,TRANSPOSE(FREQUENCY(F2,{-1,5,10,15})),0):为第3列。
所以:
“E”位于A1:D4区域的第3行与第3列交叉位置。
数据源与查找结果可以实现动态的联动: