在一组数据中查找与指定值最接近的数字

同学们,大家好。今天是学习frequency的第4天,不知道大家对这个函数的用法掌握了没有。对于我来说,它还是比较难掌握的,所以今天咱们继续来学习巩固一下它的用法。今天的案列是在一组数据中查找出与指定值最接近的数字,用的还是lookup+frequency的套路。

先来看下源数据,和查找到的结果。如下图所示,A列是源数据,C2单元格是指定值,我这里创建一个控件来控制指定值的变化,D2单元格是在A列中查找到与指定值最接近的数字,也就是要查找的结果。同时A列设置了条件格式,为了与查找到的结果值对比。

下面先来说下思路,要查找与指定值最接近的数字,那肯定就是这个数字与指定值的差距最小,也就是它们的差值最接近0,更进一步就是差值的绝对值最小,差值的平方也是最小。相信大家这个都能理解的。我还是举个例子吧,比如指定值是90,那么在A列中与90最接近的是89,90与89的差比90与其他数字的差更接近0,90与89差的绝对值也是最小的,90与89差的平方也是最小的。

而我们的公式也是基于这一底层逻辑写的,在D2单元格输入公式=LOOKUP(1,0/FREQUENCY(0,(A2:A11-C2)^2),A2:A11),完成。

我们还是以指定值为90说明,先来看FREQUENCY(0,(A2:A11-C2)^2)这部分,frequency的第1参数是0,第二参数(A2:A11-C2)^2的结果是{256;1600;64;2916;3025;361;25;1;289;1225},也就是A列数据与指定值差的平方。然后统计第1参数0在第2参数各区间的个数,具体统计的过程之前的文章说过了,这里不再重复了。可以看下面的第2张示意图。

frequency最后返回的结果是{0;0;0;0;0;0;0;1;0;0;0}。其中1的位置刚好对应的是89的位置,也就是我们要查找值的位置。接下来就是用lookup来完成了。最开始的公式就相当于=LOOKUP(1,0/{0;0;0;0;0;0;0;1;0;0;0},A2:A11),也就是用lookup查找到了1对应的89。

这里frequency的第1参数只有一个值,那么它会在第2参数中找到大于等于它的最小值,也就是1(B列中的1),然后返回它的个数1(C列中的1)。还是看上面的那张示意图。

有一点忘说了,这个公式只能找到第一个最接近的数字,如果有多个最接近的数字需要用万金油。

好了,我只能说到这里了,剩下的要大家自己去练习思考体验了。

链接:

https://pan.baidu.com/s/1nyXhYtoLcbhbH83DHjfCLQ

提取码:76r1

(0)

相关推荐