0

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

如果我使用 XLookup 函数和 Exact Match 来定位那个 ID 号并在它旁边的列中给我一些值,我会得到 N/A。

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

在此处输入图像描述

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

当我在 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 号进行数学运算并得到正确的结果。

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

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

4

1 回答 1

1

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

使用如下行写入值:

myID = Round(myID + 0.1, 1)
于 2021-10-20T02:42:55.583 回答