您的帖子说您要“删除 x000d(即仅提取美元金额)。也就是说,假设您的原始数据从 A2 开始(即数据在 A2 :A). 将以下公式放入另一个空列(例如 B1)的第一个单元格中:
=ArrayFormula({"Extracted";IF(A2:A="",,REGEXEXTRACT(SUBSTITUTE(A2:A&"_",",",""),"\d+"))})
工作原理:
ArrayFormula(...) 表示我们将处理整个范围,而不仅仅是一个单元格。
外部大括号 {...} 表示虚拟数组将由不相似或不连续的部分组成。
虚拟数组的第一部分是标题。在这里,即“提取”;但你可以随意改变它。
分号的意思是“将下一个信息放在前一部分的下方。”
IF(A2:A="",, ...) 是一个标准检查,基本上说“不要尝试处理 A 列中的任何空白单元格”;或者换种说法,“如果 A2:A 中的任何单元格为空白/空,则什么也不做。”
暂时跳过 REGEXEXTRACT,A2:A&"_" 在 A2:A 中的每个条目后面附加一个下划线。这允许 A2:A 中仅为美元金额的条目(例如,来自帖子,$116,878)在它们后面有一个一致的符号(如果还没有的话)。 (并且将下划线添加到已经有下划线的任何内容都无关紧要,因为我们不会提取那么远。)
现在我们已经有了新的字符串,我们用每个逗号替换空值(即删除所有逗号)。
最后,REGEXEXTRACT 将获取所有虚拟修改的字符串并提取\d+,这意味着只有长度大于0 (+) 的完整序列中的数字(\d)。请注意,REGEXEXTRACT 只会返回 first 它遇到的匹配项,因此不会提取 000。
在 REGEXEXTRACT 周围放置一个 IFERROR 包装,以防万一您在现实生活中遇到根本没有任何数字序列的情况。在这些情况下,不会返回任何内容(而如果没有 IFERROR,则会返回错误)。
提取完成后,您可以将格式>数字>货币(四舍五入)应用于整个列。
附录:
在附加评论(如下)之后,原始数据似乎在 T 列中,所有五个条目都在一个单元格中,并且 OP 希望从每一行中提取所有五个金额。在这种情况下,假设 U:Y 列开始时为空,请将以下内容放在单元格 U1(而不是 U2)中:
=ArrayFormula({"Va11","Val2","Val3","Val4","Val5";IF(T2:T="",,IFERROR(REGEXEXTRACT(SUBSTITUTE(T2:T&"_",",",""),REPT("\$(\d+)[^\$]*",5))))})
这与前面的公式大致相同。区别:
现在有五个标题。
您会在此处看到REPT(...,5)。这是重复相同提取五次的简单方法。
重复提取现在如下:
\$(\d+)[^\$]*
美元符号前面的反斜杠表示将这些符号视为文字而不是通常的含义(即字符串结尾)。所以提取内容如下:
\$ 任何以美元符号开头的东西
(\d+) extract what is between the ( ), which is any group of digits [^$]*` 后跟任何非美元符号的数字(包括 0)字符
正如我所说,REPT 将重复此五次;因此将提取与此模式匹配的五个组。
了解如果您有 任何 组不完全遵循该模式,导致五个匹配的提取,nothing 将被返回。
确保将 U:Y 格式化为四舍五入的货币,否则您最终会将其中一些数字转换为 原始日期,从而完全不正确。 p>