各位表親好,今天我們一起聊聊從字符串中提取數(shù)字的技巧。實(shí)際工作中,難免遇上數(shù)字和其它內(nèi)容混在一個(gè)單元格中的情況,而我們需要提取其中的數(shù)字內(nèi)容。而根據(jù)數(shù)字和其它內(nèi)容的性質(zhì),我們又分為以下幾種情況分別處理。 一、連續(xù)的數(shù)字和漢字分離。 A1單元格內(nèi)容“696477632歡迎加入初學(xué)者交流群”,我們注意到,部分內(nèi)容為數(shù)字,其余全為漢字,且數(shù)字與漢字之間有明顯的分界線,數(shù)字是連續(xù)的,漢字也是連續(xù)的,沒(méi)有像”我1你2他3“這種間隔排列。提取數(shù)字的公式為=--LEFT(A1,2*LEN(A1)-LENB(A1))。LEFT函數(shù):從字符串或者單元格引用的左側(cè)提取指定位數(shù)的字符,比如=LEFT(“我愛(ài)中國(guó)”,2)表示從“我愛(ài)中國(guó)”這個(gè)字符串的左側(cè)提取2個(gè)字符,結(jié)果為“我愛(ài)”。LEN和LENB函數(shù)都是返回參數(shù)的長(zhǎng)度,不同的是,LEN函數(shù)不檢測(cè)全角半角,有幾個(gè)字符就返回幾,LENB對(duì)于占兩個(gè)字節(jié)的漢字和其它全角字符,返回2。比如len(“我”)的結(jié)果為1,而Lenb(“我”)的結(jié)果為2。具體到這個(gè)題目中,LEN(A1)結(jié)果為19,再乘2為38,而LENB(A1)結(jié)果為29,二者相減剛好為單字節(jié)內(nèi)容的數(shù)量(數(shù)字的位數(shù))。 Tips:1、LEFT為文本函數(shù),返回的結(jié)果為文本格式,要得到數(shù)值,需要讓它進(jìn)行兩次取負(fù)運(yùn)算。 2、如果數(shù)字在右側(cè),把LEFT函數(shù)改為RIGHT即可。 3、如果是提取漢字,可以使用=RIGHT(A1,LENB(A1)-LEN(A1))。 4、使用公式=LOOKUP(10^10,--LEFT(A1,ROW($1:$10)))也可以得到預(yù)期結(jié)果。10^10表示10的10次方,這里假定數(shù)字不超過(guò)10位,文本,如果超過(guò),需要將10^10和row($1:$10)適當(dāng)擴(kuò)大。 二、連續(xù)的數(shù)字在漢字中間 A1單元格內(nèi)容“昨天花458元買(mǎi)了一支鋼筆”。這樣數(shù)字前后都有漢字,應(yīng)該怎么提取數(shù)字內(nèi)容呢? 方法1:找到第1個(gè)數(shù)字所在位置,并使用上面提到的2*len(a1)-lenb(a1)的方法得到數(shù)字的位數(shù),之后使用mid函數(shù)來(lái)提取。 先來(lái)查找第一個(gè)字符的位置公式為=MIN(FIND(ROW($1:$10)-1,A1&2/17))。 公式解析:row($1:$10)-1生成0-9的一個(gè)數(shù)組,使用find函數(shù)查找0-9各個(gè)數(shù)字在A1中的位置,然后使用min函數(shù)取最小值(即最先出現(xiàn)的位置)。但0-9的數(shù)字往往并不都現(xiàn)出在要查找的字符串中,比如這里就沒(méi)有0,所以find函數(shù)會(huì)返回錯(cuò)誤值#VALUE,導(dǎo)致min獲取不到正確結(jié)果。所以我們可以在原字符串后連接一個(gè)由0-9組成的字符串,以保證find返回正確結(jié)果。而2/17(2除以17)的結(jié)果,恰好包含了0-9的所有數(shù)字。 得到了第一個(gè)數(shù)字出現(xiàn)的位置,現(xiàn)在我們就可以使用MID函數(shù)來(lái)提取:=MID(A1,MIN(FIND(ROW($1:$10)-1,A1&2/17)),2*LEN(A1)-LENB(A1))。這是一個(gè)數(shù)組公式,數(shù)組公式需要按Ctrl+Shift+Enter才能得到正確結(jié)果。 方法2:從第1位開(kāi)始,依次取1-10位,構(gòu)成二維數(shù)組({'昨','昨天','昨天花','昨天花4','昨天花45','昨天花458','昨天花458元','昨天花458元買(mǎi)','昨天花458元買(mǎi)了','昨天花458元買(mǎi)了一';'天','天花','天花4','天花45','天花458','天花458元','天花458元買(mǎi)','天花458元買(mǎi)了','天花458元買(mǎi)了一','天花458元買(mǎi)了一支';'花','花4','花45','花458','花458元','花458元買(mǎi)','花458元買(mǎi)了','花458元買(mǎi)了一'…}),然后找出這個(gè)數(shù)組中最大的數(shù)。公式為=MAX(IFERROR(--MID(A1,ROW($1:$30),COLUMN($A:$J)),1=2))。這也是一個(gè)數(shù)組函數(shù)。 TIP:因?yàn)閿?shù)組中多數(shù)為非數(shù)字內(nèi)容做取負(fù)運(yùn)算會(huì)得到錯(cuò)誤值,所以加一層容錯(cuò)函數(shù)IFERROR,將錯(cuò)誤值替換為FALSE(因?yàn)?=2的返回值為FALSE)。這樣MAX函數(shù)就可以順利取到最大值了。 提取方法不僅限于以上幾種,篇幅限制,今天就舉這幾個(gè)例子。今天涉及到多個(gè)函數(shù)嵌套,需要大家慢慢理解并學(xué)習(xí)其中的思路,隨著學(xué)習(xí)的深入,你會(huì)發(fā)現(xiàn)思路比掌握函數(shù)本身更加重要。 |
|
來(lái)自: 路與堅(jiān)持 > 《Excel》