【问题标题】:Google Sheets - Split DataGoogle 表格 - 拆分数据
【发布时间】:2020-12-13 06:33:35
【问题描述】:

我在 Google 表格中有这些数据

$71,675_x000d_
$80,356_x000d_
$107,361_x000d_
$123,393_x000d_
$116,878

我希望将它们分成不同的列。

但是,当我使用 Data > Split Data into different Columns 这样做时,它会将 $71 和 675_x000d_ 分开,但我需要 $71,275 并删除 xoood

请注意,最后一个数字没有那些多余的字符。

请帮忙。

【问题讨论】:

  • 如果您使用“_”(下划线)作为自定义分隔符会怎样?这有帮助吗?取决于您是需要 _x000d_ 出现在下一列中还是只想将其删除。
  • Keyur,请更新您的问题,以包含您作为评论添加到@Erik 答案的新信息。您也可以将您提供的图像粘贴到您的问题中,而不是将其作为链接提供。但是共享样本表总是有帮助的,并且对于任何试图解决您的问题的人来说都更容易(更少的工作!)。请参阅本指南:support.google.com/docs/thread/3808684?hl=en

标签: google-sheets


【解决方案1】:

您的帖子说您要“删除 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>

【讨论】:

  • 这行得通,但我在一列中总共有 5 个值。检查此图片链接 - ibb.co/kDJQYGT - 另外,是否可以将这 5 个放入相同的行但不同的列中。
  • 首先,您已将公式放入 U2 而不是 U1。正如我在上面的回答中所解释的那样,它需要进入 U1,否则一切都会关闭一排。也就是说,我将使用另一个公式编辑我的原始答案,该公式将在一个单元格中处理 5 个(并且正好是 5 个)条目。
  • 谢谢@Erik - 效果很好。
【解决方案2】:

请使用以下公式并根据需要设置单元格格式。

=ArrayFormula(IFERROR(SPLIT(REGEXREPLACE(A2:A,"\n|_x000d_","√"),"√")))

与其他公式相比,上述公式的最大优势在于它适用于单个单元格中包含的任意数量的行(如下图所示)。

使用的功能:

【讨论】:

  • 请记住,根据site guidelines,当回答解决您的问题时,accept 甚至是upvote 它,这样其他人也可以从中受益。
  • 与其他公式相比,此公式的最大优势在于它适用于单个单元格中包含的任意数量的行(如图所示)。
【解决方案3】:

你可以使用SPLIT函数:

=ArrayFormula(IF(LEN(A:A),SPLIT(A:A,"_x000d_",FALSE),""))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    相关资源
    最近更新 更多