当数据导入到Excel时,根据提供数据的源应用程序,数据可以有多种格式。
例如,它可以包含客户或员工的姓名和地址,但最终都会在工作表的一列中显示为一个连续的文本字符串,而不是分隔为单独的列,例如姓名、街道、城市。
可以使用公共分隔符拆分数据。分隔符字符通常是逗号、制表符、空格或分号。此字符分隔文本字符串中的每个数据块。
使用分隔符的一个很大的优点是它不依赖于文本内的固定宽度。分隔符准确地指示在何处分割文本。
您可能需要拆分数据,因为您可能希望使用地址的特定部分对数据进行排序,或者希望能够对特定组件进行筛选。如果数据在透视表中使用,则可能需要将名称和地址作为其中的不同字段。
本文将向您展示八种方法,通过使用分隔符来指示拆分点,将文本拆分为所需的组件部分。
目录
样本数据
以上示例数据将用于以下所有示例。下载示例文件以获取示例数据以及基于分隔符提取数据的各种解决方案。
用于拆分文本的Excel函数
有几个Excel函数可用于拆分和操作单元格中的文本。
左函数
这个左边函数返回文本左侧的字符数。
语法
=左(文本,[编号])
- 文本–这是您希望从中提取的文本字符串。它也可以是工作簿中的有效单元格引用。
- 数字[可选]-这是您希望从文本字符串中提取的字符数量。该值必须大于或等于零。如果值大于文本字符串的长度,那么将返回所有字符。如果省略该值,则假定该值为1。
右函数
这个正当函数返回文本右侧的字符数。
语法
=右(文本,[数字])
这些参数的工作方式与左边上述功能。
查找函数
这个发现函数返回指定文本在文本字符串中的位置。这可用于定位分隔符字符。请注意,搜索区分大小写。
语法
=查找(潜文本,文本,[开始])
- 潜台词–这是您要搜索的文本字符串。
- 文本–这是要搜索的文本字符串。
- 开始[可选]–搜索的起始位置。
透镜函数
这个LEN函数将按文本字符串的字符数给出长度。
语法
=LEN(文本)
- 文本–这是要确定其字符数的文本字符串。
使用LEFT, RIGHT, FIND和LEN函数提取数据
使用示例数据的第一行(B3),可以组合这些函数,使用分隔符将文本字符串拆分为多个部分。
=查找(“,”,B3)
你使用发现函数获取第一个分隔符字符的位置。这将返回值18.
=左(B3,查找(“,”,B3)-1)
然后你可以使用左边函数提取文本字符串的第一个组件。
注意发现获取第一个分隔符的位置,但需要从中减去1,以便不包含分隔符字符。
这将返回Tabbie O 'Hallagan.
=右(B3,LEN(B3)-查找(“,”,B3))
获取文本字符串的下一个组件更为复杂。您需要使用上述公式从文本中删除第一个组件。
此公式采用原始文本的长度,查找第一个分隔符位置,然后计算该分隔符之后文本字符串中剩余的字符数。
这个正当函数然后截断第一个分隔符之前(包括第一个分隔符)的所有字符,以便在找到每个分隔符字符时,文本字符串变得越来越短。
这将返回克罗地亚格雷达丹尼斯公园056号,邮编:44273
您现在可以使用发现查找下一个分隔符和左边函数提取下一个组件,使用与上面相同的方法。
对所有分隔符重复此操作,将文本字符串拆分为多个组成部分。
FILTERXML函数作为动态数组
如果您使用的是Excel for Microsoft 365,则可以使用FILTERXML函数拆分文本,并将输出作为动态数组。
您可以通过将分隔符字符更改为XML标记将文本字符串转换为XML字符串来拆分文本字符串。这样您就可以使用FILTERXML函数提取数据。
XML标记是用户定义的,但在本例中,s表示子节点,t表示主节点。
=“”&替换(B2,”,“”&“”
使用上述公式将XML标记插入到文本字符串中。
名称街道城市国家邮政编码
这将在示例中返回上述公式。
请注意,每个定义的节点后面都有一个带反斜杠的结束节点。这些XML标记定义了文本每个部分的开始和结束,并且有效地起到了与分隔符相同的作用。
=转置(FILTERXML(“”&SUBSTITUTE(B3),“,”,“”&“”,“/s”))
上面的公式将把XML标记插入到原始字符串中,然后使用这些标记将项目拆分为一个数组。
如上所示,数组将每个项溢出到一个单独的单元格中。使用转置函数会导致数组水平溢出,而不是垂直溢出。
用于拆分文本的FILTERXML函数
如果您的Excel版本没有动态数组,那么您仍然可以使用FILTERXML函数提取单个项。
=FILTERXML(“”&SUBSTITUTE(B3),“,”,“”&“”,“/s”)
现在可以使用上面的FILTERXML公式。
这将返回第一部分Tabbie O 'Hallagan.
=FILTERXML(“”&SUBSTITUTE(B3),“,”,“”&“”,“//s[2]”)
要返回下一节,请使用上面的公式。
这将返回文本字符串的第二部分丹尼斯公园056号.
您可以使用相同的模式返回示例文本的任何部分,只需更改[2]在相应的公式中找到。
快速填充分割文本
Flash Fill允许您输入一个示例,说明您希望如何分割数据。
你可以看看这个使用闪存填充清理数据指南更多细节。
然后选择要分割数据的第一个单元格,然后单击“快速填充”。Excel将填充示例中的其余行。
使用示例数据,输入名称进牢房C2然后Tabbie O 'Hallagan进牢房C3.
Flash填充应该自动填充来自样本数据的其余数据名称。如果没有,您可以选择单元格补体第四成份,然后单击Flash填补中的图标数据工具工作组数据Excel功能区的选项卡。
同样,您可以添加大街进牢房D2,城市进牢房E2,国进牢房地上二层和邮政编码进牢房G2.
分别选择后续单元格(D2到G2),然后单击“闪光填充”图标。其余的文本组件将填充到这些列中。
“文本到列”命令可拆分文本
此Excel功能可用于根据分隔符字符将单元格中的文本拆分为多个部分。
- 选择整个样本数据范围(B2:B12)。
- 点击数据选项卡。
- 点击文本到列中的图标数据工具Excel功能区组和向导将出现,以帮助您设置如何拆分文本。
- 选择限定在选项按钮上。
- 按下下一个按钮
- 选择逗号作为分隔符,并取消选中任何其他分隔符。
- 按下下一个按钮
- “数据预览”窗口将显示如何分割数据。选择放置输出的位置。
- 点击完成按钮
您的数据现在将显示在工作表的列中。
将数据转换为CSV文件
这只适用于逗号作为分隔符,因为CSV(逗号分隔值)文件依赖逗号分隔值。
打开记事本,复制并粘贴样本数据。您可以通过在Windows任务栏左侧的搜索框中键入Notepad打开记事本,也可以在应用程序列表中找到它。
将数据复制到记事本后,使用文件➜另存为从菜单上。输入带有.csv后缀的文件名,例如Split Data.csv。
然后可以在Excel中打开此文件。在“浏览器文件类型”下拉列表中选择csv文件,然后单击“确定”。您的数据将自动与每个组件一起显示在单独的列中。
VBA来拆分文本
VBA是Excel背后的编程语言,允许您编写自己的代码来处理数据,甚至创建自己的函数。
要访问Visual Basic编辑器(VBE),请使用中高音+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和列的计数。
变量计数在每个循环中递增,以便数据在整个行中填充,然后向下填充。
拆分文本的电源查询
Excel中的Power Query允许使用分隔符将列操作为节。
相关职位:
首先要做的是定义数据源,即输入Excel工作表的示例数据。
点击数据选项卡,然后单击获取数据在获取和转换数据色带组。
点击从文件在第一个下拉列表中,然后单击从工作簿在第二个下拉列表中。
这将显示一个文件浏览器。找到示例数据文件(已打开的文件)并单击好吧.
将显示一个导航弹出窗口,显示工作簿中的所有工作表。单击包含示例数据的工作表,这将显示数据的预览。
展开左侧窗格中的数据树以显示现有数据的预览。
点击转换数据这将显示电源查询编辑器。
确保其中包含数据的单列突出显示。点击分裂柱中的图标使改变功能区的组。点击按分隔符在出现的下拉列表中。
这将显示一个弹出窗口,允许您选择分隔符。默认值为逗号。
点击好吧数据将被转换成单独的列。
点击关闭并加载在关组,并将新工作表添加到工作簿中,其中包含新格式的数据表。
Power Pivot计算列以拆分文本
可以使用Power Pivot通过计算列拆分文本。
点击动力枢轴选项卡,然后单击添加到数据模型中中的图标桌子组
您的数据将被自动检测到,弹出窗口将显示位置。如果这不是正确的位置,那么它可以在这里重新设置。
离开我的表有标题在弹出窗口中取消勾选复选框,因为我们也想拆分标题。
点击好吧并将显示预览屏幕。
右键单击数据列的标题(Column1),然后单击弹出菜单中的Insert column。这将插入一个计算列,其中可以输入公式。
=左([Column1],FIND(“,”,[Column1])-1)
在公式栏中,插入上述公式。
其工作方式与本文方法1中描述的函数类似。
这个公式将提供名称文本字符串中的组件。
使用与第一个计算列相同的方法插入另一个计算列。
=左(右([Column1],LEN([Column1])-LEN([computed Column 1])-1),查找(“,”,右([Column1],LEN([Column1])-LEN([computed Column 1])-1)
将上述公式插入到公式栏中。
这是一个复杂的公式,您可能希望使用多个计算列将其拆分为多个部分。
这将提供大街组件在文本字符串中。
可以继续修改公式,为文本字符串的所有其他组件创建计算列。
数据透视表的问题在于它既需要文本值,也需要数值。由于示例数据仅为文本,因此需要添加一个数值。
单击列表中的第一个单元格添加列列,然后在公式栏中输入公式=1。
这将在该列的所有位置添加值1。点击数据透视表中的图标家色带的标签。
点击数据透视表在弹出菜单中。在第一个弹出窗口中指定透视表的位置,然后单击好吧. 如果数据透视表字段窗格不会自动显示,请右键单击透视表骨架并选择显示字段列表.
点击计算列在字段列表中,并将其放置在行窗
我们的透视表现在将显示文本字符串的各个组件。
结论
如果您不知道如何将每个项提取到自己的单元格中,那么处理逗号或其他分隔符分隔的数据可能是一件非常痛苦的事情。
谢天谢地,Excel有很多选项可以帮助完成这项常见任务。
你喜欢用哪一个?
嗨,Richard–哇,这是一个全面的列表!我通常使用LEFT或MID,或者在某些情况下使用text-to-columns。我还没有考虑过这些其他方法中的一些伟大的列表!
FilterXML by dynamic array对于我已经研究了一段时间的东西来说有点改变游戏规则——如果它可以应用于另一个动态数组而不是单个单元格,那将是一个救命稻草——这样,输出动态数组将随着分隔数据集中记录的数量而增长和收缩。作者或智囊团的任何建议最终都会出现在这一页上吗?
这是一个数组的数组情况,不幸的是目前不支持。
这是一门极好的学问。
谢谢
嗨,理查德,干得好。这里有第九种方法,因为在Excel的浏览器版本中无法使用FILTERXML。因此,对于单元格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函数。
嗨,理查德,
非常感谢。
现在需要为字符串执行文本到列的转换,=Left(Find)公式非常适合!
亲切问候,,
很高兴听到它对你有用!