编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

远离IF,遇到数字区间里的多条件查询,一定要用frequency函数

wxchong 2025-09-06 14:21:59 开源技术 13 ℃ 0 评论

问题求助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列交叉位置。




数据源与查找结果可以实现动态的联动:


本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表