用分隔符分隔文本的8种方法

2020-12-28

当数据导入到Excel时,根据提供数据的源应用程序,数据可以有多种格式。

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

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

使用分隔符的一个很大的优点是它不依赖于文本内的固定宽度。分隔符准确地指示在何处分割文本。

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

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

样本数据

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

Excel函数分割文本

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

离开函数

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

语法

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

右函数

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

语法

=右(文本,[数字])

这些参数的工作方式与左边上面描述的函数。

发现功能

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

语法

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

LEN函数

这个LEN函数将根据文本字符串的字符数给出长度。

语法

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

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

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

=查找(“,”,B3)

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

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

然后你可以使用左边函数提取文本字符串的第一个组件。

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

这将返回Tabbie O 'Hallagan.

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

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

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

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

这将返回克罗地亚格里达丹尼斯公园056号,44273

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

对所有分隔符重复,这将把文本字符串分割成组件部分。

FILTERXML函数作为一个动态数组

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

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

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

= " < t > < >”和替代(B2 , ",", " <年代 >" ) & " < / t > "

使用上述公式将XML标记插入到文本字符串中。

< t > <年代>名称< / s > <年代>街< / s > <年代>城市< / s > <年代>国家< / s > <年代>邮编< / s > < / t >

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

请注意,每个定义的节点后面都有一个带反斜杠的结束节点。这些XML标记定义了文本每个部分的开始和结束,并且有效地起到了与分隔符相同的作用。

=转置(FILTERXML(“”&SUBSTITUTE(B3),“,”,“”&“”,“/s”))

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

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

用于拆分文本的FILTERXML函数

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

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

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

这将返回第一部分Tabbie O 'Hallagan.

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

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

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

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

快速填充分割文本

Flash Fill允许您输入一个示例,说明您希望如何分割数据。

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

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

使用示例数据,输入名称进细胞C2,然后Tabbie O 'Hallagan进细胞C3.

Flash填充应该自动填充来自样本数据的其余数据名称。如果没有,您可以选择单元格补体第四成份,然后单击Flash填补图标数据工具集团的数据选项卡的Excel ribbon。

类似地,您可以添加大街进细胞D2,城市进细胞E2,国家进细胞F2,邮政编码进细胞G2.

分别选择后续的单元格(D2到G2),并单击Flash Fill图标。其余的文本组件将被填充到这些列中。

文本到列命令分割文本

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

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

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

将数据转换为CSV文件

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

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

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

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

VBA来分割文本

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

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

Sub SplitText() Dim MyArray() As String, Count As Long, i As Variant For n = 2 To 12 MyArray = Split(Cells(n, 2), ",") Count = 3 For Each i In MyArray Cells(n, Count) = i Count = Count + 1 Next i Next n End Sub .每一个i

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

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

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

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

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

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

电源查询拆分文本

Excel中的Power Query允许使用分隔符将列操作为节。

相关文章:

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

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

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

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

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

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

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

确保其中包含数据的单列突出显示。点击分裂柱图标变换功能区的组。点击由分隔符在下拉列表中显示。

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

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

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

Power Pivot计算列以拆分文本

可以使用Power Pivot通过计算列拆分文本。

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

您的数据将被自动检测到,弹出窗口将显示位置。如果这不是正确的位置,那么它可以在这里重新设置。

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

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

右键单击数据列的标题(Column1),然后单击弹出菜单中的Insert column。这将插入一个计算列,其中可以输入公式。

= 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年的Microsoft Excel工作经验。他使用Excel为主要银行和金融机构提供解决方案和创建应用程序。他写了几本关于Excel和Access的书,由McGraw Hill在美国出版。

订阅

广告

相关文章

评论

9日评论

  1. 约翰

    嗨,Richard–哇,这是一个全面的列表!我通常使用LEFT或MID,或者在某些情况下使用text-to-columns。我还没有考虑过这些其他方法中的一些伟大的列表!

    回复
  2. 马克·瑞恩

    FilterXML通过动态数组是一个改变游戏规则的东西我一直在做一段时间,这将是一个救生员,如果它可以应用到另一个动态数组而不是一个细胞——这样的输出动态数组贵方觉得与记录的数量增长和收缩带分隔符的数据集。作者或智囊团有什么建议吗?

    回复
    • 约翰

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

      回复
  3. 苏尼尔

    这是一门极好的学问。

    回复
    • 约翰

      谢谢!

      回复
  4. 大卫

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

    =修剪(中期(C9、转置(找到(CHAR(160),替代(连接(“,”,C9)”、“CHAR(160),序列(LEN (C9 (C9) LEN(替代品 ,”,”,””))+ 1))))、转置(FIND (CHAR(160),(连接(C9的替代品 ,”,”),”,”, CHAR(160),序列(LEN (C9) LEN(替代(制备过程 ,”,”,””))+ 1))))置(找到(CHAR(160),替代(连接(“,”,C9)”、“,CHAR(160),序列(LEN (C9 (C9) LEN(替代品 ,”,”,””))+ 1))))))

    回复
    • 约翰

      哇,真长。完美使用新的LAMBDA和LET函数。

      回复
  5. 摩根大通羊皮

    你好理查德,

    谢谢你!

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

    亲切的问候,

    回复
    • 约翰·麦克杜格尔

      很高兴听到它对你有用!

      回复

给…留一个回复大卫取消回复

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

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

获取最新消息

跟我们来

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

把它钉在Pinterest上

分享这