昨天在中國移動培訓(xùn)結(jié)束后,學(xué)員小K咨詢到:有什么方法可以從中文和數(shù)字混合的文本中,提取部分?jǐn)?shù)字?
小K的問題是這樣的,她想從下圖所示的套餐分類的數(shù)據(jù)中提取金額。
如果金額的數(shù)字長度是一致的,我們可以先用FIND函數(shù)查詢“元”字的位置,再用MID函數(shù)截取我們想要的數(shù)字。可問題就在于數(shù)字的長度是不一樣的,有1位的、2位的、3位的,最多不超過3位的數(shù)字。
當(dāng)我們在函數(shù)運(yùn)用的過程中卡殼了,覺得寫不下去了,不用著急,一步一步來。所以,我還是按照剛剛的思路,用FIND函數(shù)查詢出“元”字的位置,再用左取字符的LEFT函數(shù)取出“元”字左側(cè)的所有字符,公式如下:
=LEFT(A2,FIND("元",A2)-1)
接著就要想一想如何從右往左取出長短不一的1-3位的數(shù)字。首先我用RIGHT函數(shù)從右往左取1-3位的數(shù)字,公式如下:
=RIGHT(B2,ROW($1:$3))
ROW函數(shù)用于返回行號,ROW($1:$3)返回的就是1、2、3三個(gè)數(shù)字,意味著分別從右往左取1個(gè)字符、2個(gè)字符、3個(gè)字符,以B2單元格的內(nèi)容為例,就會形成這樣的結(jié)果:{"8";"58";"惠58"}
接著在RIGHT函數(shù)的結(jié)果前面添加負(fù)號,公式如下:
=-RIGHT(B2,ROW($1:$3))
添加負(fù)號的作用是將數(shù)值轉(zhuǎn)換為負(fù)數(shù),含有文本字符的字符串則變成錯(cuò)誤值:{-8;-58;#VALUE!}。
最后用LOOKUP函數(shù),使用1作為查詢值,在由負(fù)數(shù)、0和錯(cuò)誤值構(gòu)成的數(shù)組中,忽略錯(cuò)誤值提取最后一個(gè)等于或小于1的數(shù)值。最后再使用負(fù)號,將提取出的負(fù)數(shù)轉(zhuǎn)為正數(shù)。
=-LOOKUP(1,-RIGHT(B2,ROW($1:$3)))
到這個(gè)步驟,我們就實(shí)現(xiàn)了從中文和數(shù)字混合的文本中,提取出部分?jǐn)?shù)字。這是函數(shù)的運(yùn)行結(jié)果: