在我将单元格置于编辑模式然后退出之前,XLookup 函数不会检测到精确匹配

XLookup function won't detect an exact match until I place the cell in edit mode and then exit

我在 Excel 365 中使用 XLookup 函数。我使用 VBA 脚本为一行数据创建一个 ID 号,然后将该 ID 号放入一个单元格中。

如果我使用带有精确匹配的 XLookup 函数来定位该 ID 号并在它旁边的列中给我一些值,我会得到一个 N/A。

但是,如果我手动找到确切的 ID 号并将单元格置于编辑模式,然后退出单元格而不采取任何其他步骤以任何方式更改数据,则 XLookup 函数 returns正确的结果。

如果我让单元格保持初始状态,但使用匹配模式“-1”来获得完全匹配或下一个更小的匹配,它 return 是正确的结果。我不想让它处于那种模式,因为我的最终函数将是两个嵌套的 Xlookup 函数,它们检查一个 table 的 ID,如果不存在,则查看另一个 table,所以我不希望第一个函数 return “下一个更小”的结果。

当我在VBA脚本中生成ID号时,我将其生成为“Variant”类型,因为ID号是小数,例如210.1。然后,我只需将该单元格的值设置为变体 ID 号。

这是我将数据放入单元格的方法:

Dim myID As Variant
Dim myCell As Variant
Dim myRange As Range

Set myRange = Range(someNamedRange)

myID = GenerateNextID 'This generates a variant in the form of something like 201.1

For Each myCell In myRange

    myCell.Value = myID
    myID = myID + 0.1

Next myCell

Excel 好像能认出是数字;至少我似乎能够对身份证号码进行数学运算并得到正确的结果。

我尝试将查找 ID 号放在引号中,以查看将其作为文本而不是数字查找是否会产生不同的结果,但它并没有改变我的结果。

为什么我会得到这个结果?有没有办法在不使用不同的匹配模式的情况下解决它?

您有一个浮点精度错误。 E11 中的值是 211.39999999999998 而不是 211.4。 Excel 更正了您重新输入单元格值时的错误。

使用如下一行写入值:

myID = Round(myID + 0.1, 1)