【问题标题】:Splitting up data in Google Spreadsheet for adjacent columns在 Google 电子表格中为相邻列拆分数据
【发布时间】:2021-05-05 21:07:03
【问题描述】:

我想将电子表格列(工作 ID#、姓氏、名字)中的数据拆分为两个相邻的列。这样我就有 3 个单独的列用于这些数据。

这是我的电子表格的链接:https://docs.google.com/spreadsheets/d/1gsLYnrNHEMbZTML1YZG-NhtDYO_FAQaAPwGFvtqn2kg/edit?usp=sharing

【问题讨论】:

  • 你能举例说明你想要的结果是什么吗?您的电子表格上也没有 Work ID 列。

标签: regex google-sheets split google-sheets-formula


【解决方案1】:

我的工作是基于您工作表中的 B 列 (last_name) 包含您的合并数据 (employee_ID last_name, first_name)。

您可以使用三个公式来做到这一点,使用regexreplaceregexextract

员工 ID

把它放在单元格 A1 中:

=arrayformula({"employee_ID";iferror(if($B2:$B="","",value(regexextract($B2:$B,"^.*\d"))),"")})

名字

把它放在单元格 C1 中:

=arrayformula({"first_name";if($B2:$B="","",regexreplace($B2:$B,"^.*\,\ ",""))})

姓氏

我在部门前面创建了一个新列 D。这进入单元格 D1:

=arrayformula({"last_name";if($B2:$B="","",regexreplace(regexreplace($B2:$B,".*\d\ ",""),"\,.*",""))})

总结

每个都有一个使用{} 的数组。数组的第一部分是"" 中的列标题,如"employee_ID"。这样您就可以将公式保留在第 1 行,以防您想在数据集上添加过滤器视图。然后 ; 是一个返回,然后是下面的其余单元格:iferror(if($B2:$B="","",value(regexextract($B2:$B,"^.*\d"))),"")

regexextract($B2:$B,"^.*\d") 在开头 ^.* 查找任何内容,然后是数字 \d

value() 将结果转换为数字。 iferror 处理找不到数字的地方。

在 first_name 上,以 ^.* 开头的任何内容,后跟逗号 \,,然后将空格 \ 替换为 ""(即删除)。

在 last_name 上,.*\d\ 替换任何 .* 后跟一个数字 \d 后跟一个空格 \ 没有 ""(即删除),然后从该结果中另一个替换删除逗号 @987654345 @ 后跟任何 .*

一个单元格中的公式

如果您想一次性进行拆分,例如新列 F、G 和 H,请将其放入单元格 F1:

=arrayformula(iferror(trim(split({"employee_ID,last_name,first_name";if($B2:$B="","",value(regexextract($B2:$B,"^.*\d"))&", "&regexreplace($B2:B,"^.*\d\ ",""))},",")),""))

但是,employee_ID 会被格式化为文本。

【讨论】:

  • 乐于助人。如果您需要任何调整,请告诉我:-)
【解决方案2】:

我相信对你来说最简单的方法是使用以下逻辑和单一公式

=ArrayFormula(IFERROR(SPLIT(REGEXREPLACE(A2:A,"(\d+) (.+), (.+)","$1@$2@$3"),"@")))

请手动填写标题。将它们包含在公式中不必要地使事情复杂化。只需确保 B2C2D2 以下的所有内容都已清除。
请告诉我们有关公式如何工作的信息。

使用的功能:

【讨论】:

  • 非常棒的解决方案。如果您想避免拆分中的字符可能会错误地输入到源数据中@,那么您可以使用char(6655)。该行将是:=ArrayFormula(IFERROR(SPLIT(REGEXREPLACE($A2:$A,"(\d+) (.+), (.+)","$1"&char(6655)&"$3"&char(6655)&"$2"),char(6655)),"")).
  • 将公式放在第 2 行的唯一缺点是您无法对源数据进行筛选视图。如果需要过滤视图,则可以使用:=ArrayFormula(IFERROR(SPLIT({"employee_ID"&char(6655)&"first_name"&char(6655)&"last_name";REGEXREPLACE($A2:$A,"(\d+) (.+), (.+)","$1"&char(6655)&"$3"&char(6655)&"$2")},char(6655)),""))
  • @Aresvik 你不必要地让事情复杂化。代替@,您可以使用在您的数据中找不到的任何字符。 (如?。至于过滤视图,同样有更简单的方法。
猜你喜欢
  • 2016-07-14
  • 1970-01-01
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多