提取Excel单元格中的汉字_方法总结

RecordByOscar2018-06-19 12:59:25

部分内容来自互联网,文后附带链接,公众号整理、总结发布。

带图完整总结版请查看以下云笔记:

http://note.youdao.com/yws/public/redirect/share?id=3b042a08c5062feb02ddca41d0db1650&type=false

如需查看原文,请点击下面链接:

http://jingyan.baidu.com/article/6dad5075d83e5fa123e36ec1.html




      对于一个混杂各种字母、数字及其他字符和汉字的文本字符串,要提取其中的汉字,在Excel中通常可用公式法、分列、快速填充的方法。一般来说,分列适用性最差,一般要求字符格式一致,或是有可以区分的分隔符,但是不能否定它非常好使非常常用;同时,实际工作中,不同的方法可能是交叉使用的,不同的功能实现不同的效果而已。
   下面详细介绍 不同的情景如何提取Excel单元格中的汉字,分为:公式、分列、VBA自定义函数的方法(PS,VBA,不懂,那串公式复制自原网页)

      例如下图A列中的字符串,要在B列提取其中的汉字(或词语)。



  method1(公式法):
(1)字符串中的汉字是连续的,中间没有其它字符分隔。如果汉字位于字符串的开头或结尾,用LEFT或RIGHT函数即可提取,例如上图中A2:A4区域中的字符串。在B2中输入下面的公式:
    =LEFT(A2,LENB(A2)-LEN(A2)), 就会返回字符串中开头的几个汉字。
详解:LENB函数和LEN函数都可用返回文本字符串中的字符数,不同的是,LENB函数会将每个汉字(双字节字符)的字符数按2计数,LEN函数则对所有的字符,无论是单字节还是双字节都按1计数,因而公式中的“LENB(A2)-LEN(A2)”返回文本字符串中的汉字个数。)

(2)同样对于A6:A8区域中的字符串,在B6中用RIGHT函数即可: =RIGHT(A6,LENB(A6)-LEN(A6))


(3)字符串中的汉字是连续的,中间没有其它字符分隔。如果汉字位于字符串的中间,可使用下面的数组公式。例如图中A10:A12区域中的字符串,在B10中输入数组公式:
    =MID(A10,MATCH(2,LENB(MID(A10,ROW(INDIRECT("1:"&LEN(A10))),1)),),LENB(A10)-LEN(A10))
    公式输入完毕,按Ctrl+Shift+Enter结束。
详解:这一段包含七个函数,一层层从里到外拆解嵌套LEN(A1),得到A1单元格字符长度,即15,套入INDIRECT公式,INDIRECT("1:"&15)得出一个文本字符器的引用1:15,套入ROW函数。ROW(1:10)得出一个常量数组{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},再套入MID函数,MID(A1,{1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},1)分别截取A1单元格每一个字符I,t,e,l, ,酷,睿, ,I,3, ,2,1,2,0;再带入LENB函数得出包含双字节的字条长度,中文是双字节,英文和数值都是单字节,所以会得出一个数组{1,1,1,1,2,2,1,1,1,1},再带入MATCH函数。=MATCH(2,{1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,},) 精确查找2所在的位置为第6位,所以,这个公式返回结果为6;


然后继续套入MID函数,从第六位截取两位,就是想要的两个汉字了。记住公式输入完毕,按SHIFT+CTRL+ENTER结束


Method2(快速填充):
“快速填充”的方法。
在C1中输入“联想家悦”,然后“快速填充”,如果每一行模式都和“联想家悦”的“提取模式”相同,就会成功提取。否则不会成功。


    但是,使用上述公式时要求字符串中的汉字是连续的,中间没有其它字符分隔。如果字符串中的汉字之间有其它字符分隔,例如下图中的A14单元格,要提取其中的所有汉字,那种麻烦的公式可能就不能提取了(PS,暂时我不会,但是快速填充还是可以用的,只要模式一样)


先说下快速填充的方法:
step1:(在B14中输入想要提取完毕的效果)



step2:(双击B14单元格右下角的“+”号,完成后效果如下)



step3:(选择“快速填充”,完成后,就是我们想要的效果。)



说明:这种快速填充的方法,其实非常好使,因为,一般我们从库中导出的数据,格式一般是一致的。根据你想要的提取效果,一个快速填充就ok了。但是有一点要注意,如果单元格字符超过255,就不能成功了,可能需要寻找其他方法。

method3:VBA自定义函数

这时候,如果不用“快速填充”的方法,可用下面的自定义函数。
方法是:
     按Alt+F11,打开VBA编辑器,单击菜单“插入→模块”,在代码窗口中输入粘贴下面的代码:


Function 提取汉字(sString As String) As StringDim regEx As ObjectSet regEx = CreateObject("VBScript.RegExp")With regEx    '搜索整个字符串    Global = True    '匹配非汉字    .Pattern = "[^\u4e00-\u9fa5]"    '将字符串中的非汉字替换为空    提取汉字 = .Replace(sString, "")End WithSet regEx = NothingEnd Function