一、案例 「领导发给我一个表格,让我把每个单元格内的汉字提取出来。可是表格里数字、字母、汉字混合在一起,几千条数据。这可怎么做啊」小伙伴苦恼得午饭都没心情吃了。 回到工位,小伙伴向我展示了那张让她烦恼的表格。(见下图) 从这样的表格提取汉字确实有难度。首先汉字的位置不固定,有的在数字和字母前面,有的在数字和字母后面;其次汉字的字数也不固定。 不过好在单元格内的汉字都是排列在一起的,只要我们知道汉字的起始位置和字数,就可以使用MID函数将汉字提取出来。 二、确定汉字的起始位置 确定汉字的起始位置需要利用LENB和LEN函数统计文本字符串长度的差异性。 下图所示为使用Len函数和LenB函数分别计算文本长度。可以看到,当文本为数字时,Len函数返回“1”,LenB函数返回“2”。 我们可以将单元格内的字符逐个取出,用LenB函数分别计算其文本长度。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”出现的位置,该位置就是汉字的起始位置。 三、确定汉字个数 |
|