日常工作中,,對(duì)數(shù)據(jù)的預(yù)處理往往花費(fèi)很多的時(shí)候,,本篇介紹從文本中提取出手機(jī)號(hào)的各種方法,建議收藏備用,。 舉例:A列是雜亂的文本數(shù)據(jù),,需要提取出手機(jī)號(hào)碼,得到B列的結(jié)果: find或search函數(shù)法在B2單元格中輸入公式: =MID(A2,FIND('1',A2),11) 或者將FIND函數(shù)改成SEARCH,,也是一樣的效果: =MID(A2,SEARCH('1',A2),11) 計(jì)算思路: 手機(jī)號(hào)碼都是從1開始的,,所以首先用FIND('1',A2),找到1所在的位置,,然后用MID函數(shù)取11位得到手機(jī)號(hào),。 從這個(gè)思路也知道,,這個(gè)是有BUG的,當(dāng)前面的文本也出現(xiàn)了1的時(shí)候,,該公式就不能使用了,,如下所示: MAX或min函數(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)來進(jìn)行兩次負(fù)數(shù)計(jì)算,,是正常的數(shù)字的話,就會(huì)得到數(shù)字,,如果有文本的話,,就會(huì)出錯(cuò), ?然后用IFERROR來屏蔽錯(cuò)誤值 ?然后取最大值,,或最小值來得到結(jié)果 下圖是MAX函數(shù)一步步拆分的過程 所以知道為什么用MIN求值的時(shí)候,,要在原文本前面&一個(gè)任意的字符,,如自學(xué)成才了吧。 lookup函數(shù)或VLOOKUP函數(shù)在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ù)思路同樣的畫出計(jì)算過程。 VBA方法上述的函數(shù)公式方法都只能提取出一個(gè)手機(jī)號(hào)碼,,如果一個(gè)列中有兩個(gè)手機(jī)號(hào)碼的話,,它是沒有辦法全部查找出來的,,有的方法可能找到的是前面一個(gè),有的方法是找到的后面一個(gè) 如果需要全部找出來的話,就可以使用VBA的方法來完成了,,我們直接說制作過程: ?按ALT F11,,調(diào)出VBA編輯器,,在空白處右鍵插入一個(gè)模塊 然后在模塊里面輸入代碼: Function sz(xstr As String)
Dim i As Integer
Dim n
For i = 1 To Len(xstr)
If Mid(xstr, i, 1) = 1 And IsNumeric(Mid(xstr, i, 11)) Then
n = Mid(xstr, i, 11)
If Len(n) = 11 Then
sz = sz & '/' & n
End If
End If
Next i
If Len(sz) Then
sz = Right(sz, Len(sz) - 1)
Else
sz =''
End If
End Function
這樣就創(chuàng)建了一個(gè)自定義的函數(shù)sz()用來提取手機(jī)號(hào),,我們直接在公式里面輸入 =sz(A2) 不管是幾個(gè)手機(jī)號(hào)碼,,都可以快速的將它提取出來,。 你學(xué)會(huì)了么,自己動(dòng)手試試吧~ |
|