首页 > 解决方案 > Excel中匹配函数的精度错误

问题描述

我有一个数据框,比如来自 A1:C100,其中每个单元格都是一个值(不是从任何公式派生的),恰好存储为百分比。我复制并粘贴数据框中的一列值(例如列 A),将其从最大到最小排序,然后将其粘贴到列 E 中。然后我使用=MATCH(E1, $A$1:$A$100, 0),它按预期工作并返回正确的行。

但是,如果我随后为 E 中的每个值添加一个常数,例如列 F 是=E+1,并且使用=MATCH(F1-1, $A$1:$A$100, 0)大约 90% 的值仍然是正确的,但有些返回 #N/A。

如何在不更改原始数据框的情况下解决此问题?我已经尝试将数据四舍五入到各种精度点(例如=MATCH(ROUND(F1-1,4), $A$1:$A$100, 0)),或者使用非精确匹配(例如=MATCH(F1-1, $A$1:$A$100, 1),甚至类似的东西=MATCH(F1-.999, $A$1:$A$100, -1))但没有运气。

任何其他建议/其他人曾经遇到过这样的事情吗?根本问题是什么?

标签: excelexcel-formula

解决方案


您的精度校正的问题在于它仅应用于 Match 函数的“查找”组件。要获得更准确的“匹配”率,建议您在源头四舍五入正在“搜索”的值,或者简单地部署以下内容:

= Match(round(range_1,6), round(range_2,6), 0)

您可以根据您的示例/q 将 range_1、range_2 替换为相关/相应的范围。

注意 - 在源代码处执行此操作的优势(即插入一个附加列,例如 range_3,其中 range_3 = round(range_2,6),然后在上面的等式中用 range_3 替换 range_2)涉及计算速度(这将是快得多,特别是如果 range_2 相当长,例如 >30k 行)。这样做的原因应该很明显:匹配函数中的计算对执行的每个匹配/单元格重复,而“源”版本只会应用“一次”计算(即跨所有有问题的行/单元格)。

希望这是有道理的,祝您工作顺利。

PS - 如有必要,将 round(range,6) 更改为 round(range,4)。出于验证原因,在条件格式中使用类似的东西时,我通常喜欢 6 dps...

塔,J


推荐阅读