公式对一个单元格返回 #VALUE 错误,但对另一个单元格不返回

公式对一个单元格返回 #VALUE 错误,但对另一个单元格不返回

我正在使用 Microsoft Excel 365,在其中使用公式来清理通过复制和粘贴列表信息获得的原始数据MTG 救赎卡牌搜索关于原始数据的几点观察如下:

  1. 我通过拖动选择并突出显示顶部项目的名称,然后按住 Shift 键并单击显示列表中最后一个项目的价格右侧;
  2. 粘贴时会出现文本换行(即使我保留了某些预先设置的目标格式);
  3. 一些原始定价数据带有偏差调整,位于“+”符号后面或包含在括号中。

我试图保留必要的价格数据并删除偏差调整,并将结果数据转换为数值,以便我可以对其进行进一步的数值处理。我使用的公式旨在获取 G 列中的原始价格数据并在 H 列中输出清理结果的数值,如下所示:

=NUMBERVALUE(SUBSTITUTE(LEFT($G2,LEN($G2)-IFERROR(FIND("+",$G2),IFERROR(FIND("(",$G2),0))),"$",""))

由于以下原因,配方按图示组装:

  1. 如果找不到字符串“+”或“(”(在我的例子中),则 FIND/SEARCH 函数将返回错误。因此,不分先后顺序,我首先尝试查看是否存在“+”,如果不存在,则尝试查找“(”,如果两者都未找到,则我相信数据,假设原始数据是标准价格。
  2. 因为我只想要实际价格,所以我想要“+”或“(”之前的所有内容,因此我使用 LEFT 函数提取数据字符串的一部分,即从字符串长度中减去“+”或“(”的位置,如果两者都未找到,则减去 0。
  3. 为了尽量减少误解,我还删除了所有“$”符号。

其他尝试包括:

  1. 执行上述操作后,使用 TRIM 删除数据中的悬挂空格,但结果与上面显示的更简单的公式相同。这并不奇怪,因为 NUMBERVALUE 函数本身会忽略空格。
  2. 在查找“+”之前,先切换查找“(”的顺序,但这也没有改变 H 列的结果。
  3. 我甚至测试了公式的各个部分,以测试每个阶段的结果。问题似乎出在评估 NUMBERVALUE 函数时。

以下是我的 Excel 工作表的片段:

Excel 工作表的片段

鉴于我正在做的事情以及看到的有关 #VALUE 错误结果的表面差异,这里是有关 Excel 告诉我的并且我能够辨别的错误的附加信息。

  1. 当我将鼠标悬停在错误框上时,它会告诉我“公式中使用的值的数据类型错误”。
  2. 括号内有偏差调整的原始价格数据是导致此错误的原因。
  3. 如果您查看单元格 K64,您会发现它显示了所需的结果,尽管其对应的 H 列值没有显示。需要注意的是,K64 中的公式使用了单元格 K60 的长度,这让我有点困惑。
  4. 我找到了解决方案:根据我在上一篇文章中分享的内容,我尝试在查找“(”时使用 FIND 函数的输出长度,并将 1 添加到该起始位置,这样可以从左侧提取的字符数就缩短了一个。换句话说,我明确避免抓取开括号之前的空格,这实际上可能不是一个合适的空格,而是网页中嵌入的一些特殊字符。
  5. 部分显圣:我意识到我“计算错误”的问题之一是我使用 LEFT 提取的字符数。括号使价格字符串长了一个字符,这反过来又使我的 LEN()-FIND() 操作为括号中包含偏差调整的条目拉入额外的“空间”。当然,这仍然不能解释为什么这会导致问题,除非该空间以某种奇怪的方式嵌入。

如果有人能告诉我如何轻松、快速、可靠地检查数据(无论是粘贴到 Excel 后还是从网页本身),以便确定是否存在模糊的特殊字符,我将不胜感激。我知道有一个简单的 VBE 代码可以输入,但我正在寻找一种更直接、更简单的方法。

谢谢你!

相关内容