在实际工作中,比如我们计算出一个电阻值为46欧,那么我们的库里到底是有哪个电阻值最接近呢?可能有一些有经验的工程师会说当然是47欧呀。
但是如果我们计算出来的是80.2欧呢?是不是得去查一下表格看看到底哪个最接近,或是说至少也需要先用肉眼把两个比较接近的值拉出来,然后再减一减进行对比?如果这个值还会多次变更呢?那么工作量也就增加了起来。
我们是否有更快更好的方法去做这件事呢?其实可以通过Excel表格来自动的取得最接近的值。要完成这一步,需要知道5个函数。
1. ABS
2. MIN
3. MATCH
4. INDEX
5. ARRAY公式,必须用 "Control + Shift + Enter"键来确定。
如下所示为ABS函数 {ABS($C$2-A:A) } 计算结果。使用数组公式会在内存中创建一个数组,他的值可以使用普通计算公式往下拉可以看得到。
这里我们使用了数组函数,所以需要用Control + Shift + Enter来确定。函数会增加一个{}表示为数组函数。可以看到ABS计算结果为5,其实是用5-0的结果,因为A的第一行没有数据,默认为0。
我们通过MIN函数可以找到 {ABS($C$2-A:A)} 数组中差异最小的值。因为为库中有5欧的电阻,刚好与匹配电阻5欧相等,所以说{MIN(ABS(C2-A:A))}的计算结果为0。
使用MATCH去匹配数组的位置,因为MATCH去查找了MIN算出来的结果对应ABS算出来结果第几行。
如果需要匹配的值为5,那么使用公式{MATCH(MIN(ABS($C$2-A:A)),ABS($C$2-A:A),0)}匹配中对应的位置是第6行。
如果是要匹配20欧,那么最近的应该是22,是在第5行。
通过以上的函数我们知道需要匹配电阻值是在第几行了,所以接下来可以通过INDEX函数来查找到相关值。
因为index可以直接或间接的取得到对应单元格值。我们使用参考行和刚才算出来的行数,可以得到与需要匹配电阻值最接近的值。
使用公式{=INDEX(A:A,MATCH(MIN(ABS($C$2-A:A)),ABS($C$2-A:A),0))}就得得到计算出需要匹配的电阻,库里最接近的值。如需要匹配电阻值为5,那么库里刚好有,就显示5。
如果是20欧的话,那么最接近的应该是22欧。所以就计算出22。
当然如果有18欧的电阻,那和22欧电阻都跟20欧差2欧,到底会选哪个呢?那就是哪个先就是哪个,原因是我们去查找最小值的时候是从上到下的顺序做的,然后MATCH是找到MIN的位置去找行数。所以谁在前面就会被选入。如下动图所示演示了整个文章中写到的公式变化:
最后我们可以得到一个公式:
{=INDEX(A:A,MATCH(MIN(ABS($C$2-A:A)),ABS($C$2-A:A),0))}
对他的解析是:ABS得到了与C2之间的差值的数组,MIN函数得到了数组中的最小值。MATCH匹配到了最小值在数组内是第几行。INDEX从A:A列中找到对应的行数。所以最终得到的结果就是在A:A中找到了与C2之间差值最小的数字。