如何在VBA中调用EXACT工作表函数?
问题分析与解决方案
Exact函数的误用:
Application.WorksheetFunction.Exact是专门用来对比两个文本字符串是否完全一致的函数,它不会处理数值精度问题,也不能直接用单元格对象和数值计算结果(outCell - inCell是数值)做对比,这是当前代码的核心问题。数值对比的正确方式:Excel/VBA中的浮点数计算可能存在精度误差(比如
0.1+0.2≠0.3的情况),直接用=或<>判断数值是否相等容易出错。正确做法是计算两个值的差值绝对值,和一个极小阈值(比如1E-9,即十亿分之一)比较,判断是否近似相等。修改后的代码示例:
Set deltaCell = ActiveWorkbook.Sheets("qry_invalid_deltas").Range("z4") Set outCell = deltaCell.Offset(0, -1) Set inCell = outCell.Offset(0, -1) ' 计算两个值的差值绝对值,判断是否在精度范围内 Dim deltaVal As Double, calcVal As Double deltaVal = CDbl(deltaCell.Value) calcVal = CDbl(outCell.Value) - CDbl(inCell.Value) Debug.Print Abs(deltaVal - calcVal) > 1E-9 ' 输出True表示两个值不相等(超出精度阈值)
如果确实需要用字符串对比的方式(不推荐用于数值场景),需把两边都转成字符串再调用Exact:
Debug.Print Application.WorksheetFunction.Exact(CStr(deltaCell.Value), CStr(outCell.Value - inCell.Value))
内容的提问来源于stack exchange,提问作者Z T Minhas
相关产品推荐
相关产品推荐

