一、案例 「領(lǐng)導發(fā)給我一個表格,讓我把每個單元格內(nèi)的漢字提取出來??墒潜砀窭飻?shù)字、字母、漢字混合在一起,幾千條數(shù)據(jù)。這可怎么做啊」小伙伴苦惱得午飯都沒心情吃了。 回到工位,小伙伴向我展示了那張讓她煩惱的表格。(見下圖) 從這樣的表格提取漢字確實有難度。首先漢字的位置不固定,有的在數(shù)字和字母前面,有的在數(shù)字和字母后面;其次漢字的字數(shù)也不固定。 不過好在單元格內(nèi)的漢字都是排列在一起的,只要我們知道漢字的起始位置和字數(shù),就可以使用MID函數(shù)將漢字提取出來。 二、確定漢字的起始位置 確定漢字的起始位置需要利用LENB和LEN函數(shù)統(tǒng)計文本字符串長度的差異性。 下圖所示為使用Len函數(shù)和LenB函數(shù)分別計算文本長度。可以看到,當文本為數(shù)字時,Len函數(shù)返回“1”,LenB函數(shù)返回“2”。 我們可以將單元格內(nèi)的字符逐個取出,用LenB函數(shù)分別計算其文本長度。LenB函數(shù)返回第一個“2”的字符所在位置就是漢字的起始位置。 如下圖所示,在單元格B2輸入公式 =MATCH(2,LENB(MID(A2,ROW(INDIRECT("1:"&LEN(A2))),1)),0), 按Ctrl+Shift+Enter結(jié)束公式輸入,拖動填充柄向下復(fù)制公式。該公式返回的數(shù)字就是漢字的起始位置。 公式解析: (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內(nèi)的字符逐個取出,返回{"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”出現(xiàn)的位置,該位置就是漢字的起始位置。 三、確定漢字個數(shù) |
|