【问题标题】:Excel, VBA, VLookup text value with and without apostrophe带和不带撇号的 Excel、VBA、VLookup 文本值
【发布时间】:2021-06-08 23:48:42
【问题描述】:

经过数小时的反复试验,我确定对范围内的文本字符串执行 Application.Vlookup 会返回:

  1. 如果搜索范围内的文本前面没有撇号,则会出现错误 2042
  2. 如果文本前面有撇号,则返回搜索范围内的值

两个搜索变量都是类型 8,字符串,但只有带撇号的范围值被认为是相等的,即使要搜索的字符串中没有撇号。

有没有办法让 Vlookup 将不带撇号的文本视为相等?不,我宁愿不必为所有内容添加撇号。

提前致谢。

PS 做了一个小程序,使用不同版本的 Excel,但仍然得到不理想的结果...

Excel Program and VLookup results

Excel Macro and it's 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() 将查找值转换为字符串。

标签: excel vba vlookup


【解决方案1】:

您已将工作表单元格格式化为“文本”,但如果您这样做输入值之后它不会“采用”:默认情况下,单元格内容将左对齐,但值仍然是数字用于公式等。

带有' 前缀的值在查找中有效,因为它实际上是文本:如果您在“文本格式”单元格中重新输入值(无需添加撇号),那么这些值也将变为非数字并将由 vlookup 匹配。

例如见下文 - 前 4 行是“值”的“常规”格式;接下来的 4 行被格式化为“文本”(在输入值之后)。

501 和 506 都不能被识别为数字,因为它们有 ' 前缀。

504 在应用文本单元格格式后重新输入,因此被视为非数字。

505 和 507 仍被 Excel 视为数字。

相关:https://answers.microsoft.com/en-us/msoffice/forum/msoffice_excel-mso_winother-mso_2010/a-number-formatted-as-text-is-really-a-number/085bb189-342b-4eed-bc33-2f149c6db244

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-18
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    相关资源
    最近更新 更多