意外的VLOOKUP&匹配行为

时间:2012-02-13 12:10:03

标签: excel excel-formula

当使用0.1025作为VLOOKUP或MATCH函数的lookup_value时,只有在将值硬编码为数字时,公式似乎才有效。如果引用另一个单元格中的值,则公式会产生#N / A错误。奇怪的是,如果首先将ROUND应用于参考单元,则问题似乎已被消除。另一个有效的解决方案是,如果单元格值首先乘以100然后乘以它的倒数,而2或5则不起作用。类似的行为发生在0.0875,0.1175和0.1425。

这里显示的公式可以解决这个问题。

复制下面并粘贴到单元格A1。

0.1025  =CEILING(A3,0.0025) =A1=B1
0.14821 =VLOOKUP(B1,A:B,2,0)    
0.10163 =MATCH(B1,A:A,0)    
        =MATCH(0.1025,A:A,0)    
        =MATCH(ROUND(B1,4),A:A,0)   
        =MATCH(10.25/100,A:A,0) 
        =MATCH((B1*100)/100,A:A,0)  
        =MATCH((B1*2)/2,A:A,0)

以上产生的结果如下所示。

0.1025  0.1025  TRUE
0.14821 #N/A    
0.10163 #N/A    
        1   
        1   
        1   
        1   
        #N/A    

为什么?

1 个答案:

答案 0 :(得分:0)

我的猜测(因为我自己遇到过这个问题,无数次,你的解决方案是我们使用过的),它与Excel中的精度值有关。每当我处理小数时,我都被迫“测试”Excel是否在显示它们时是否正在处理我的值,或者是否也存在微量值。

我们使用ROUND(),MROUND(),CEILING()和FLOOR()函数在这些值被进一步使用之前精确地“重置”它们。

0.1025可能真的是这样,除非你开始格式化该单元格8-10个十进制值...会出现更多数字吗?

你可以非常轻松地复制这个。在A1中,键入 0.1025 ,然后在A2中输入 0.1026
现在尝试公式 = EXACT(0.0001,A2-A1)。 结果将是 FALSE

如果您在该单元格上运行EVALUATE FORMULA函数,您将看到一个微值导致数学值为 0.000100000000000003 ,而不仅仅是 0.0001

因此,舍入工具将显示的值更正为ACTUAL值,这就是我们这样做的原因。是的,Excel!