一、问题分析
「领导发给我一个表格,让我把每个单元格内的汉字提取出来。可是表格里数字、字母、汉字混合在一起,几千条数据。这可怎么做啊」小伙伴苦恼的午饭都没心情吃了。
回到工位,小伙伴向我展示了那张让她烦恼的表格。(见下图)

从这样的表格提取汉字确实有难度。首先汉字的位置不固定,有的在数字和字母前面,有的在数字和字母后面;其次汉字的字数也不固定。
只要我们知道汉字的起始位置和字数,就可以使用MID函数将汉字提取出来
二、确定汉字的起始位置
确定汉字的起始位置需要利用LENB和LEN函数统计文本字符串长度的差异性。
下图所示为使用Len函数和LenB函数分别计算文本长度。可以看到,当文本为数字时,Len函数返回“1”,LenB函数返回“2”。

LenB函数返回第一个“2”的字符所在位置就是汉字的起始位置。
如下图所示,在单元格B2输入公式
=MATCH(2,LENB(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),0),
按Ctrl+Shift+Enter结束公式输入,拖动填充柄向下复制公式。该公式返回的数字就是汉字的起始位置。

公式解析:(1)ROW(INDIRECT("1:"&LEN(A2)))返回从1到单元格A2字符长度的一个序列值{1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16}
(2)MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)将单元格A2内的字符逐个取出,返回{"Z";"J";"2";"0";"2";"0";"0";"2";"0";"1";"花";"园";"宝";"宝";"项";"目"}
(3)LENB(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1))计算每个字符的长度,返回{1;1;1;1;1;1;1;1;1;1;2;2;2;2;2;2}
(4)MATCH(2,LENB(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),0)返回第一个“2”出现的位置,该位置就是汉字的起始位置。
三、确定汉字个数
在往期文章LENB和LEN函数的差就是单元格内汉字的字数
在单元格C2输入公式 =LENB(A2)-LEN(A2),拖动填充柄向下复制公式。该公式返回的值就是单元格内汉字的个数。

四、提取单元格内汉字
在D2单元格内输入公式 =MID(A2,B2,C2),拖动填充柄向下复制公式。
A2单元格Mid函数表示,从单元格A2字符串的起始位置11(即B2单元格的值)提取6(即C2单元格的值)个字符,返回的值就是A2单元格内的汉字。

如果不增加B、C两列辅助列,提取汉字的公式为
=MID(A2,MATCH(2,LENB(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),0),LENB(A2)-LEN(A2)),按Ctrl+Shift+Enter结束公式输入。
