如何将混合了中英文及不同数量空格的文本,快速拆分成多列
前段时间学员小D咨询到:有什么简便的方法,可以将将混合了中英文及不同数量空格的文本,快速拆分成多列?下图所示是小D的问题:
小D需要将这列数据拆分成如下图所示的4列数据:
刚一开始看到这个表格的时候,我说用“数据-分列”用空格作为分隔符来拆分就可以了吧。仔细一想,不行,前面的英文单词不一定是一个词,有些两个词中间也有空格,每一列的长度都是不固定的。
我们一起来思考一下,这个问题的解决方案。我们在处理Excel问题的时候,一定要分析数据的规律。
比如这个案例中,我们可以观察到,前面的英文单词、词类和中文解释中间都是一个空格间隔的,而中文解释和英文解释中间的空格都是2个空格以上的。找到了特定的规律之后,我们就可以分段来提取了。
提取第4部分
我们可以先把最后一部分的英文解释先提取出来。这里我们需要先利用FIND函数查询2个空格的位置,再用MID函数截取出来指定位置和指定长度的字符。我们先来看看这相关函数的语法:
查询一个字符串在一个单元格的起始位置:FIND(要找的字符串,包含查询字符串的单元格)
从中间取字符:MID(文本,从第几位开始取,取多少位)
清除文本首尾空格:TRIM(文本)
组合的函数:=TRIM(MID(A1,FIND(" ",A1),200))
A1就是要拆分的列的第一个文本所在的单元格地址。最里面一层函数通过FIND函数查找两个空格所在的起始位置,用这个起始位置作为MID函数的第二个参数,向后截取长度为200的字符。因为不确定后面的英文解释有多少个字符,所以输入了一个比较大的数字。最后再用TRIM清除截取出来的文本的首尾空格。
提取第3部分
接着再来提取第3部分:中文解释。中文解释可以用MID函数从.所在的下一个字符开始,原始文档中的中文解释不超过10个字,所以截取的长度我直接输入了10,如果实际数据无法确定多少个字符,可以用两个空格的位置减去圆点的位置来就计算。
组合函数:=TRIM(MID(A1,FIND(".",A1)+1,10))
提取第2部分
接着来提取第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部分
最后来提取第1部分:英文单词,使用了LEFT函数从文本的左侧提取,提取的长度用小圆点的位置减去了词类的长度,最后用TRIM清除首尾空格。
计算文本长度:LEN(文本)
组合函数:TRIM(LEFT(A1,FIND(".",A1)-LEN(C1)))
到此4列就拆分完毕了。如果对这个案例感兴趣,可以在"快乐享用Office"公众号后台输入关键字"拆分列",领取作业文件。最后汇总一下本文中使用到的相关函数:
查询一个字符串在一个单元格的起始位置:FIND(要找的字符串,包含查询字符串的单元格)
从中间取字符:MID(文本,从第几位开始取,取多少位)
左取字符:LEFT(文本,取多少位)
右取字符:RIGHT(文本,取多少位)
清除文本首尾空格:TRIM(文本)
可以按照定义的次数重复显示文本:REPT(文本,重复的次数)
在某一文本字符串中替换指定的文本:SUBSTITUTE(文本,旧字符,新字符)
计算文本长度:LEN(文本)