【发布时间】:2021-06-08 23:48:42
【问题描述】:
经过数小时的反复试验,我确定对范围内的文本字符串执行 Application.Vlookup 会返回:
- 如果搜索范围内的文本前面没有撇号,则会出现错误 2042
- 如果文本前面有撇号,则返回搜索范围内的值
两个搜索变量都是类型 8,字符串,但只有带撇号的范围值被认为是相等的,即使要搜索的字符串中没有撇号。
有没有办法让 Vlookup 将不带撇号的文本视为相等?不,我宁愿不必为所有内容添加撇号。
提前致谢。
PS 做了一个小程序,使用不同版本的 Excel,但仍然得到不理想的结果...
Excel Program and VLookup results
在电子表格中,所有数值都是通过键盘输入的。
然后使用格式单元格选项将它们更改为文本。
然后将撇号添加到第二个文本值“478901”,如单元格左上角的绿色三角形所示。
C2 中的 Vlookup 无法将 A2 识别为文本,即使它已被格式化。
C3 中的 Vlookup 将 A3 识别为文本并在第 2 列中提供返回值。
在宏中,输出几乎说明了一切。
myData 范围由地址调用确认。
VarType 调用 A2 和 A3 中的值确认 excel 将它们视为双精度浮点数 (5) 和字符串 (8),即使两者都已格式化为文本,尽管我怀疑这只是为了显示目的。
Application.Vlookup 调用 A2 和 A3 中的值返回与电子表格 Vlookup 调用相同。
在我之前的帖子中,我说过两种 vartype 都返回字符串 (8),但只有带撇号的那个有效。这是excel的工作版本,比这个更早。所以看起来有人试图解决这个问题,或者它只是在没有引起注意的情况下结束了。不管怎样,有些东西坏了。 “444”不等于“'444”,除了在 excel 中,“444”在其他任何地方都等于“444”,但在 excel 中。
看来我需要对两者都进行测试。
【问题讨论】:
-
总是有助于显示您在测试时使用的实际数据和公式。我从来没有经历过你所描述的。
-
您似乎尝试在 VBA 中使用 VLOOKUP。请记住,前导撇号仅将单元格内容转换为文本。在没有 VBA 的工作表上进行测试时,您不会遇到同样的问题。因此,您应该专注于查找值。但是您不向我们展示您的代码是错误的。尝试使用 Cstr() 将查找值转换为字符串。