日常工作中,對(duì)數(shù)據(jù)的預(yù)處理往往花費(fèi)很多的時(shí)候,本篇介紹從文本中提取出手機(jī)號(hào)的各種方法,建議收藏備用。
舉例:A列是雜亂的文本數(shù)據(jù),需要提取出手機(jī)號(hào)碼,得到B列的結(jié)果:
在B2單元格中輸入公式:
=MID(A2,FIND('1',A2),11)
或者將FIND函數(shù)改成SEARCH,也是一樣的效果:
=MID(A2,SEARCH('1',A2),11)
計(jì)算思路:
手機(jī)號(hào)碼都是從1開(kāi)始的,所以首先用FIND('1',A2),找到1所在的位置,然后用MID函數(shù)取11位得到手機(jī)號(hào)。
從這個(gè)思路也知道,這個(gè)是有BUG的,當(dāng)前面的文本也出現(xiàn)了1的時(shí)候,該公式就不能使用了,如下所示:
在B2中輸入的公式是:
=MIN(IFERROR(--MID(A2&'自學(xué)成才',ROW($1:$100),11),'Excel'))
然后按CTRL SHIFT ENTER三鍵 計(jì)算
或者輸入的公式是:
=MAX(IFERROR(--MID(A2,ROW($1:$100),11),0))
按三鍵計(jì)算
計(jì)算思路
?用到數(shù)組從左至右一直提取11位字符,
?然后用--號(hào)來(lái)進(jìn)行兩次負(fù)數(shù)計(jì)算,是正常的數(shù)字的話,就會(huì)得到數(shù)字,如果有文本的話,就會(huì)出錯(cuò),
?然后用IFERROR來(lái)屏蔽錯(cuò)誤值
?然后取最大值,或最小值來(lái)得到結(jié)果
下圖是MAX函數(shù)一步步拆分的過(guò)程
所以知道為什么用MIN求值的時(shí)候,要在原文本前面&一個(gè)任意的字符,如自學(xué)成才了吧。
在B2中輸入公式:
=-LOOKUP(,-MID(A2&'a',ROW($1:$100),11))
或者使用VLOOKUP函數(shù)公式:
=VLOOKUP(,MID(A2,ROW($1:$100),11)*{0,1},2,)
輸入完公式按CTLR SHIFT enter三鍵計(jì)算
計(jì)算思路:
?每隔11位拆分文本里面的字符
?lookup函數(shù)構(gòu)建了一列數(shù)據(jù),vlookup函數(shù)構(gòu)建了2列匹配的數(shù)據(jù)
?模糊查找匹配得到結(jié)果
大家可以根據(jù)思路同樣的畫(huà)出計(jì)算過(guò)程。
上述的函數(shù)公式方法都只能提取出一個(gè)手機(jī)號(hào)碼,如果一個(gè)列中有兩個(gè)手機(jī)號(hào)碼的話,它是沒(méi)有辦法全部查找出來(lái)的,有的方法可能找到的是前面一個(gè),有的方法是找到的后面一個(gè)
如果需要全部找出來(lái)的話,就可以使用VBA的方法來(lái)完成了,我們直接說(shuō)制作過(guò)程:
?按ALT F11,調(diào)出VBA編輯器,在空白處右鍵插入一個(gè)模塊
然后在模塊里面輸入代碼:
這樣就創(chuàng)建了一個(gè)自定義的函數(shù)sz()用來(lái)提取手機(jī)號(hào),我們直接在公式里面輸入
=sz(A2)
不管是幾個(gè)手機(jī)號(hào)碼,都可以快速的將它提取出來(lái)。
你學(xué)會(huì)了么,自己動(dòng)手試試吧~
聯(lián)系客服