答案1
数字中有不同类型的空格(不间断空格)。这些通常是CHAR(160)
。TRIM 和 CLEAN 都无法删除这些空格,因为 Excel 将它们视为有效字符。但这会生成“数字”文本字符串,因此无法相乘。
因此我们使用 SUBSTITUTE 删除这些字符,并加入 TRIM 和 CLEAN 以获得更好的效果:
=TRIM(CLEAN(SUBSTITUTE(C2,CHAR(160),"")))*2.5
答案2
你可能会遇到很多“不间断空格“ 不由 处理CLEAN()
。这在从网页获取数据时非常常见,因为它们(如 PDF)只关心视觉呈现,而不是有人抓取数据以供进一步使用。但它来自大量输出数据的程序,特别是当它们不描绘数据的一般用途,而是描绘一组有限的人使用它时。或者 28 年前编写 CSV 输出功能时,从未更新过。
在电子表格中处理这个问题会更容易,因为您实际上只想要数字部分,而不需要任何非数字部分。
如果您需要保留值为负的指标,那就更难了。或者保留除这些空格以外的任何字符。或者像我一样,获取需要输出为离散数字的字符串。在像“90.02 45.55 .062”这样的字符串中,但保留以便可以提取它们。
但是,您只需要单个字符串中的数字,然后由 Excel 将其视为数字。以下公式可实现此目的:
=VALUE(TEXTJOIN(,TRUE,IFERROR(MID(C1,SEQUENCE(1,LEN(C1)),1)*1,"")))
它用于SEQUENCE()
获取一系列以 1 为增量增加的值,并且长度与目标的长度相同。然后,它使用这些值来指定函数的起始点,MID()
该函数输出目标中字符的矩阵。然后,它*1
对该矩阵中的数字执行数学运算 ( ),但对于非数字 (0-9) 的任何内容都会给出错误。IFERROR()
将该字符串转换为数字,并在出现错误的任何地方(目标没有数字的任何地方)使用“”。TEXTJOIN()
然后将该矩阵转换为简单的输出字符串,忽略那些“”元素,这样您现在就拥有了一个有用的字符串,该字符串仅包含目标中存在的数字。它被视为文本并将如此显示。
目前,如果您拥有较新版本的 Excel,该公式对您很有用。这是因为 Excel 会将一串数字识别为数字,即使它们被格式化为文本(毕竟它们只是格式化,并没有从根本上改变),如果将其提供给需要或合理地期望仅将数字数据作为输入的函数。因此,“C1+1”甚至会将该文本视为数字并进行加法运算,而不是给出错误或给出 0+1=1。然而,并非所有函数都会以这种方式处理输出。VLOOKUP()
会将其视为任何看起来的样子,在本例中为文本,并在数字表中查找未找到匹配项,从而给出错误。因此,我将上述内容包装起来VALUE()
以完成,以便将结果视为数字,如果您将结果用作查找函数的输入(似乎其他人可能会这样做),它将起作用。
因此,您可以删除该功能,它仍会根据需要执行标记乘法。
但是,如果您没有新SPILL
功能,或者尤其是如果您拥有较旧的 Excel 版本,则以下公式基本上适用于所有版本的 Windows Excel,并且始终会产生数字输出:
{=ROUND(NPV(-0.9,0,IFERROR(MID(L1,LEN(C1)-ROW(INDIRECT("C1:I"&LEN(C1)))+1,1)/100,"")),3)}
请注意,这是一个加拿大教育标准局公式。用作常规公式时,有时会删除最后两位数字……输出格式为货币。(Excel 很有用……因为这NPV()
是财务函数,您必须将其格式为货币,对吗?)
上述公式来自“很久以前互联网上的某个地方”……我希望可以引用我的出处,但我记不起出处了。向某位热心的大师致歉。
很高兴你问了这个问题,因为我在很多地方都遇到过这个问题,需要更新一下如何SEQUENCE()
才能帮助到你。更不用说将函数中的内部矩阵更改为输出的有用字符串,TEXTJOIN()
因为现在也可以使用这个了!立竿见影!这是一件很棒的事情!