如何将混合了中英文及不同数量空格的文本,快速拆分成多列

如题所述

第1个回答  2022-07-04
前段时间学员小D咨询到: 有什么简便的方法,可以将将混合了中英文及不同数量空格的文本,快速拆分成多列? 下图所示是小D的问题:

小D需要将这列数据拆分成如下图所示的4列数据:

刚一开始看到这个表格的时候,我说用“ 数据-分列 ”用空格作为分隔符来拆分就可以了吧。仔细一想,不行,前面的英文单词不一定是一个词,有些两个词中间也有空格,每一列的长度都是不固定的。

我们一起来思考一下,这个问题的解决方案。我们在处理Excel问题的时候,一定要分析数据的规律。

比如这个案例中,我们可以观察到,前面的英文单词、词类和中文解释中间都是一个空格间隔的,而中文解释和英文解释中间的空格都是2个空格以上的。找到了特定的规律之后,我们就可以分段来提取了。

我们可以先把最后一部分的英文解释先提取出来。这里我们需要先利用 FIND函数 查询2个空格的位置,再用 MID函数 截取出来指定位置和指定长度的字符。我们先来看看这相关函数的语法:

查询一个字符串在一个单元格的起始位置: FIND(要找的字符串,包含查询字符串的单元格)

从中间取字符: MID(文本,从第几位开始取,取多少位)

清除文本首尾空格: TRIM(文本)

组合的函数:=TRIM(MID(A1,FIND("  ",A1),200))

A1就是要拆分的列的第一个文本所在的单元格地址。最里面一层函数通过FIND函数查找两个空格所在的起始位置,用这个起始位置作为MID函数的第二个参数,向后截取长度为200的字符。因为不确定后面的英文解释有多少个字符,所以输入了一个比较大的数字。最后再用TRIM清除截取出来的文本的首尾空格。

接着再来提取第3部分:中文解释。中文解释可以用MID函数从.所在的下一个字符开始,原始文档中的中文解释不超过10个字,所以截取的长度我直接输入了10,如果实际数据无法确定多少个字符,可以用两个空格的位置减去圆点的位置来就计算。

组合函数: =TRIM(MID(A1,FIND(".",A1)+1,10))

接着来提取第2部分:词类。由于前面的英文单词有些是一个词,有些是两个词,此类的长度也不确定,我想到的方法是查找最后一个空格的位置,相关的函数包括:

可以按照定义的次数重复显示文本: REPT(文本,重复的次数)

在某一文本字符串中替换指定的文本: SUBSTITUTE(文本,旧字符,新字符)

左取字符: LEFT(文本,取多少位)

右取字符: RIGHT(文本,取多少位)

组合函数:TRIM(RIGHT(SUBSTITUTE(LEFT(A1,FIND(".",A1))," ",REPT(" ",99)),99))

先用LEFT函数将从最左侧截取到圆点的位置的所有字符,比如这段字符:lateral line n. 侧线                      A line of pressure-sensitive cells on the sides of bony fish.

就得到了这个部分的文本lateral line n.

接着用SUBSTITUTE函数将每个单词中间的一个空格替换成REPT形成的99个空格,再用RIGHT函数从右侧取出99个字符,最后用TRIM清除首尾空格。

最后来提取第1部分:英文单词,使用了LEFT函数从文本的左侧提取,提取的长度用小圆点的位置减去了词类的长度,最后用TRIM清除首尾空格。

计算文本长度: LEN(文本)

组合函数: TRIM(LEFT(A1,FIND(".",A1)-LEN(C1)))

到此4列就拆分完毕了。如果对这个案例感兴趣,可以在"快乐享用Office"公众号后台输入关键字" 拆分列 ",领取作业文件。最后汇总一下本文中使用到的相关函数:

查询一个字符串在一个单元格的起始位置:FIND(要找的字符串,包含查询字符串的单元格)

从中间取字符:MID(文本,从第几位开始取,取多少位)

左取字符:LEFT(文本,取多少位)

右取字符:RIGHT(文本,取多少位)

清除文本首尾空格:TRIM(文本)

可以按照定义的次数重复显示文本:REPT(文本,重复的次数)

在某一文本字符串中替换指定的文本:SUBSTITUTE(文本,旧字符,新字符)

计算文本长度:LEN(文本)
相似回答