Excel中按分隔符拆分文本的8种方法

2020-12-28

将数据导入Excel时,数据可以采用多种格式,具体取决于提供数据的源应用程序。

例如,它可以包含客户或员工的名称和地址,但这一切最终都以连续文本字符串的形式出现在工作表的一列中,而不是被分离成单独的列,如名称、街道、城市。

可以使用公共分隔符分隔数据。分隔符通常是逗号、制表符、空格或分号。这个字符分隔文本字符串中的每个数据块。

使用分隔符的一大优点是它不依赖于文本中的固定宽度。分隔符精确指示拆分文本的位置。

您可能需要分割数据,因为您可能希望使用地址的某个部分对数据进行排序,或者能够对特定组件进行筛选。如果数据在数据透视表中使用,则可能需要将名称和地址作为数据透视表中的不同字段。

本文将向您展示八种方法,通过使用分隔符来指示拆分点,将文本拆分为所需的组件部分。

样本数据

以上示例数据将用于以下所有示例。下载示例文件以获取示例数据以及基于分隔符提取数据的各种解决方案。

用于拆分文本的Excel函数

有几个Excel函数可以用来分割和操作单元格内的文本。

左函数

函数返回文本左侧的字符数。

语法

=左(文本,[编号])
  • 文本–这是您希望从中提取的文本字符串。它也可以是工作簿中的有效单元格引用。
  • 数字[可选]–这是您希望从文本字符串中提取的字符数。该值必须大于或等于零。如果该值大于文本字符串的长度,则将返回所有字符。如果省略该值,则假定该值为1。

正确的函数

正确的函数返回文本右侧的字符数。

语法

= RIGHT(文本,[数字])

参数的工作方式与上述功能。

查找函数

找到函数返回指定文本在文本字符串中的位置。这可用于定位分隔符字符。请注意,搜索区分大小写。

语法

= FIND (SubText, Text, [Start])
  • 潜台词-这是一个文本字符串,你想要搜索。
  • 文本-这是要搜索的文本字符串。
  • 开始[可选]–搜索的起始位置。

透镜函数

伦恩函数将按文本字符串的字符数给出长度。

语法

= LEN (Text)
  • 文本-这是您想要确定字符计数的文本字符串。

使用LEFT、RIGHT、FIND和LEN函数提取数据

使用示例数据的第一行(B3),可以组合这些函数,使用分隔符将文本字符串分割成多个部分。

= find (",", b3)

你使用找到函数获取第一个分隔符字符的位置。这将返回值18

= left (b3, find (",", b3) - 1)

然后您可以使用函数提取文本字符串的第一个组成部分。

注意找到获取第一个分隔符的位置,但需要从中减去1以便不包含分隔符字符。

这会回来的塔比·奥哈拉甘

= right (b3, len (b3) - find (",", b3))

获取文本字符串的下一个组件要复杂得多。您需要使用上面的公式从文本中删除第一个组件。

该公式获取原始文本的长度,查找第一个分隔符位置,然后计算该分隔符之后的文本字符串中还剩下多少字符。

正确的函数然后截断第一个分隔符之前以及包括第一个分隔符在内的所有字符,以便在找到每个分隔符时文本字符串变得越来越短。

这会回来的克罗地亚格里达丹尼斯公园056号,44273

您现在可以使用找到查找下一个分隔符和函数提取下一个组件,使用与上面相同的方法。

对所有分隔符重复此操作,将文本字符串拆分为多个组成部分。

FILTERXML函数作为一个动态数组

如果您使用的是Excel for Microsoft 365,则可以使用FILTERXML函数拆分文本,并将输出作为动态数组。

通过将分隔符字符更改为XML标记,可以将文本字符串转换为XML字符串,从而拆分文本字符串。这样你就可以用FILTERXML函数提取数据。

XML标记是用户定义的,但在本例中,s表示子节点,t表示主节点。

=“”&替换(B2,”,“”&“

使用上面的公式将XML标记插入文本字符串。

 名称街道城市国家邮政编码

这将在示例中返回上述公式。

注意,定义的每个节点后面都跟着一个带反斜杠的结束节点。这些XML标记定义文本每个部分的开始和结束,并以与分隔符相同的方式有效地发挥作用。

t = ' (FILTERXML(“< > < >”和替代(B3 , ",", " <年代 >" ) & " < / t >”、“/ / s "))

上面的公式将把XML标记插入到原始字符串中,然后使用这些标记将项目拆分为一个数组。

如上所述,数组将把每一项放入单独的单元格中。使用转置函数会导致数组水平溢出,而不是垂直溢出。

FILTERXML文本分割函数

如果您的Excel版本没有动态数组,那么仍然可以使用FILTERXML函数提取单个项。

t = FILTERXML(“< > < >”和替代(B3 , ",", " <年代 >" ) & " < / t >”、“/ / s”)

现在您可以使用上面的方法将字符串分成几部分FILTERXML公式

这将返回第一部分塔比·奥哈拉甘

=FILTERXML(“”&SUBSTITUTE(B3),“,”,“”&“”,“//s[2]”)

要返回下一节,请使用上面的公式。

这将返回文本字符串的第二部分056年丹尼斯公园

您可以使用相同的模式返回示例文本的任何部分,只需更改[2]在公式中找到相应的。

Flash填充分割文本

Flash Fill允许你放入一个你想要的数据分割的例子。

你可以看看这个使用闪存填充清理数据指南为更多的细节。

然后选择要分割数据的第一个单元格,然后单击“快速填充”。Excel将填充示例中的其余行。

使用示例数据,输入的名字进细胞C2然后塔比·奥哈拉甘进细胞C3

Flash fill应自动填充样本数据中的剩余数据名称。如果没有,您可以选择单元格C4,然后单击闪光填充中的图标数据工具工作组数据选项卡的Excel ribbon。

类似地,您可以添加进细胞D2城市进细胞E2国家进细胞地上二层,邮政编码进细胞G2

分别选择后续单元格(D2到G2),然后单击“闪光填充”图标。其余的文本组件将填充到这些列中。

文本到列命令分割文本

此Excel功能可用于根据分隔符将单元格中的文本分割为多个部分。

  1. 选择整个样本数据范围(B2:B12)。
  2. 点击数据Excel功能区中的选项卡。
  3. 点击文本列中的图标数据工具Excel功能区组和向导将出现,以帮助您设置如何拆分文本。
  4. 选择分隔在选项按钮上。
  5. 下一个按钮。
  1. 选择逗号作为分隔符,并取消对任何其他分隔符的检查。
  2. 下一个按钮。
  3. “数据预览”窗口将显示如何分割数据。选择放置输出的位置。
  4. 点击完成按钮。

您的数据现在将显示在工作表的列中。

将数据转换为CSV文件

这只能使用逗号作为分隔符,因为CSV(逗号分隔值)文件依赖于逗号来分隔值。

打开记事本,复制并粘贴样本数据到其中。您可以通过在Windows任务栏左侧的搜索框中输入“记事本”或在应用程序列表中找到它来打开记事本。

一旦你把数据复制到记事本,使用文件另存为从菜单中。输入一个后缀为。csv的文件名,例如Split Data.csv。

然后你可以在Excel中打开这个文件。在下拉框中选择浏览器文件类型中的csv文件,单击“确定”。您的数据将自动显示在单独的列中。

VBA来分割文本

VBA是Excel背后的编程语言,允许您编写自己的代码来操作数据,甚至创建自己的函数。

要访问Visual Basic编辑器(VBE),请使用Alt+F11

Sub SplitText()Dim MyArray()作为字符串,计数长度为,i作为n=2到12的变量MyArray=Split(单元格(n,2),“,”),计数=3对于MyArray单元格中的每个i(n,计数)=i计数=Count+1下一个i下一个n End Sub

点击插入在菜单栏中,单击模块.该模块将出现一个新窗格。粘贴上面的代码。

这段代码创建了一个名为MyArray.然后它遍历示例数据(第2行到第12行),并使用VBA Split函数填充MyArray

split函数使用逗号分隔符,因此文本的每个部分都成为数组的一个元素。

计数器变量设置为3,表示列C,这将是显示拆分数据的第一列。

然后,代码遍历数组中的每个元素,并用元素填充每个单元格。单元格引用基于行的n,列的Count。

的变量计数在每个循环中递增,以便数据填充行,然后向下填充。

拆分文本的电源查询

Excel中的Power Query允许使用分隔符将列操纵成多个部分。

相关职位:

首先要做的是定义数据源,即您输入到Excel工作表中的示例数据。

点击数据选项卡,然后单击获取数据获取和转换数据色带组。

点击从文件在第一个下拉列表中,然后单击从工作簿在第二个下拉列表中。

这将显示一个文件浏览器。找到示例数据文件(已打开的文件)并单击好啊

将显示一个导航弹出窗口,显示工作簿中的所有工作表。单击包含示例数据的工作表,这将显示数据的预览。

在左侧窗格中展开数据树以显示现有数据的预览。

点击转换数据这将显示电源查询编辑器。

确保高亮显示包含数据的单列。点击分离柱中的图标变换色带组。点击按分隔符在下拉列表中显示。

这将显示一个弹出窗口,允许您选择分隔符。默认值是逗号。

点击好啊数据将被转换成单独的列。

点击关闭并加载关闭组,一个新的工作表将添加到您的工作簿中,其中包含新格式的数据表。

能量枢轴计算列分割文本

您可以使用Power Pivot通过使用计算列来分割文本。

点击力量主选项卡,然后单击添加到数据模型中的图标组。

您的数据将被自动检测,并会弹出一个显示位置的窗口。如果这不是正确的位置,则可以在此处重新设置。

离开我的表格有标题复选框取消勾选弹出,因为我们想分割头部。

点击好啊然后会显示一个预览屏幕。

右键单击数据列的标题(第1列),然后单击弹出菜单中的“插入列”。这将插入一个可输入公式的计算列。

= LEFT ([Column1], FIND (",", [Column1]) - 1)

在公式栏中,插入上面的公式。

其工作方式与本文方法1中描述的函数类似。

这个公式将提供的名字组件在文本字符串中。

使用与第一个计算列相同的方法插入另一个计算列。

= LEFT (RIGHT ([Column1], LEN ([Column1]) - LEN ([Column1]) - 1), FIND (",", RIGHT ([Column1], LEN ([Column1]) - LEN ([Column1]) - 1)) - 1))

将上述公式插入公式栏。

这是一个复杂的公式,您可能希望使用几个计算列将其分成几个部分。

这将提供文本字符串中的组件。

可以继续修改公式,为文本字符串的所有其他组件创建计算列。

数据透视表的问题在于它既需要文本值也需要数值。由于示例数据仅为文本,因此需要添加一个数值。

的第一个单元格添加一列列,然后在公式栏中输入公式=1。

这将使1一直加到这一列。点击数据透视表中的图标功能区的选项卡。

点击数据透视表在弹出菜单中。在第一个弹出窗口中指定透视表的位置,然后单击好啊.如果数据透视表字段窗格不会自动显示,请右键单击透视表骨架并选择显示字段列表
点击计算列,并将它们放入窗口。

我们的数据透视表现在将显示文本字符串的各个组件。

结论

如果不知道如何将每个项提取到它自己的单元格中,那么处理逗号或其他分隔符分隔的数据可能会很麻烦。

谢天谢地,Excel有很多选项可以帮助完成这项常见任务。

你喜欢用哪一种?

关于作者

理查德·谢泼德

理查德·谢泼德

Richard Shepherd有25年的微软Excel工作经验。他曾使用Excel为主要银行和金融机构提供解决方案和创建应用程序。他写过几本关于Excel和Access的书,由美国麦格劳-希尔出版。

订阅

广告

相关文章

评论

9评论

  1. 约翰

    嗨Richard -哇,这是一个全面的列表!我通常使用LEFT或MID,或者在某些情况下文本到列。我没有考虑过这些其他的方法——伟大的清单!

    回复
  2. 马克·瑞恩

    FilterXML by dynamic array对于我已经研究了一段时间的东西来说有点改变游戏规则——如果它可以应用于另一个动态数组而不是单个单元格,那将是一个救命稻草——这样,输出动态数组将随着分隔数据集中记录的数量而增长和收缩。作者或智囊团的任何建议最终都会出现在这一页上吗?

    回复
    • 约翰

      这是一个数组的数组情况,不幸的是目前不支持。

      回复
  3. 苏尼尔

    这是一门极好的学问。

    回复
    • 约翰

      谢谢

      回复
  4. 大卫

    嗨,Richard,干得好。这里有第九种方法,因为FILTERXML在浏览器版本的Excel中不可用。对于单元格c9中以逗号分隔的字符串:

    =TRIM(中间(C9,转置)(FIND(CHAR(160),SUBSTITUTE(CONCATENATE(“,”,C9),“,”,CHAR(160),SEQUENCE(LEN(C9)-LEN(SUBSTITUTE(C9),“,”,”)+1))),TRANSPOSE(FIND(CHAR(160),SUBSTITUTE(CONCATENATE)(CONCATENATE(C9),“,”,”,CHAR(160),SEQUENCE(LEN(LEN(LEN(C9),“,”,”,“,”)+1))–转置,,,,,CHAR(160),序列(LEN(C9)-LEN(替换(C9,,,,))+1щщщ)

    回复
    • 约翰

      哇,这条很长。完美地使用了新的LAMBDA和LET函数。

      回复
  5. 摩根大通羊皮

    你好理查德,

    非常感谢。

    现在需要为字符串执行文本到列的转换——=Left(Find)公式非常适合!

    亲切问候,,

    回复
    • 约翰MacDougall

      很高兴你成功了!

      回复

回信约翰取消答复

您的电子邮件地址将不会被公布。必填字段已标记

这个网站使用Akismet来减少垃圾邮件。了解如何处理您的评论数据

获取最新消息

关注我们

在社交媒体上关注我们,了解Excel中的最新提示!

别在Pinterest上

分享这个