1

我有一个带有以下公式的 Google 表格:

=IFERROR(IF(AA3="","",MID((LEFT(AA3,LEN(AA3)-1)),FIND("|",AA3)+1,30)))

现在这返回一个数字。

奇怪的是它在 100% 的情况下都有效并返回适当的数字,但是如果我在一些奇怪的情况下尝试使用这个数字进行计算,那么新公式会失败,告诉我“数字”不是数字。

例子:

(-121|102)  -121    102  -->the first is a combination which I then break apart into -121 and 102

把公式复制下来,所有的工作都 100%。

然后我继续处理这些数字,在奇怪的情况下,公式告诉我“102”不是数字。

在示例输出下方:

    (-121|102) -121 102 76.00
    (-238|139‎) -238 139‎ #价值!
    (-297|52) -297 52 395.73
    (-127|201) -127 201 186.81
    (-186|149) -186 149 336.89
    (-141|120) -141 120 290.08
    (-106|97‎) -106 97‎ #价值!
    (-238|139‎) -238 139‎ #价值!
    (-297|52‎) -297 52‎ #价值!
    (-160|221) -160 221 290.06
    (-197|200) -197 200 294.55
    (-238|139‎) -238 139‎ #价值!
     (-19|10) -19 10 #价值!
     (-21|22) -21 22 323.83

有什么我可以在公式中放入强制输出为数字的吗?

=IFERROR(IF(AA3="","",MID((LEFT(AA3,LEN(AA3)-1)),FIND("|",AA3)+1,30)))
4

1 回答 1

1

该问题是由某些单元格中的“不可见”非数字字符引起的。如果您列出其中一个无效数字的字符代码,例如示例输出中的第 2 行,您将看到在文本末尾有第四个代码为8206的不可见字符。您可以使用此公式来验证这一事实(假设单元格位于 position AA2):

=CODE(MID(AA2,FIND("|",AA2)+4,1))

您应该能够使用正则表达式替换来摆脱非数字字符,如下所示:

=REGEXREPLACE(/* some text */,"[^0-9]","")

因此,根据您的原始公式从一个文本单元格中提取第二个数值的有效公式将是:

=IF(AA2="","",REGEXREPLACE(MID(LEFT(AA2,LEN(AA2)-1),
                               FIND("|",AA2)+1,30),"[^0-9]",""))

但是,我会推荐一个更稳定的公式来识别第二个值,基于 和 的|位置)

MID(AA2,FIND("|",AA2)+1,FIND(")",AA2)-FIND("|",AA2)-1)

产生以下结果公式,用于从文本单元格中充分提取第二个数值:

=IF(AA2="","",REGEXREPLACE(MID(AA2,FIND("|",AA2)+1,
                               FIND(")",AA2)-FIND("|",AA2)-1),"[^0-9]",""))
于 2012-07-24T12:38:26.740 回答