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