本文由兩部分構(gòu)成,其一提出問題并解決問題;其二解釋相關(guān)函數(shù)公式。 1, 有這樣一個問題,如下圖所示,A列是數(shù)據(jù)列,混合文本中夾雜著手機號碼;現(xiàn)在,需要在B列把A列數(shù)據(jù)中的手機號碼提取出來。 您打算怎么操作呢? 當(dāng)然是……快速填充了。 然而,快速填充這個玩意兒,時靈時不靈的。 小數(shù)據(jù)時用兩下還可以,畢竟結(jié)果若是錯了一眼就可以看出來。而大數(shù)據(jù)時,還是別用了,簡直等同于自殺,而且怎么死的都不知道。 比如這個問題,快速填充的結(jié)果如下: 這問題如果使用函數(shù)公式解決,常用的套路有以下4個: 1、=MAX(IFERROR(--MID(A2,ROW($1:$50),11),0)) 2、=MIN(IFERROR(--MID(A2&'a',ROW($1:$50),11),'T')) 3、=VLOOKUP(,MID(A2,ROW($1:$50),11)*{0,1},2,) 4、=-LOOKUP(,-MID(A2&'a',ROW($1:$50),11))
本例中,四個公式的計算結(jié)果相同,但由于它們的計算原理并不一樣,在不同的例子上彼此之間還是有所區(qū)別的。 MAX函數(shù)是提取參數(shù)中的最大值,MIN函數(shù)是提取參數(shù)中的最小值。因此,當(dāng)單元格存在多個手機號時,兩者所提取的結(jié)果將不同。 VLOOKUP函數(shù)的查詢機制是從前向后查,且查到即止,只提取首個查詢結(jié)果。 LOOKUP(比查詢范圍內(nèi)所有值都大的同類型的值,查詢范圍),該套路是提取最后一個符合條件的結(jié)果。 你瞧,兩個函數(shù)的查詢機制剛好是反過來的;沒有優(yōu)劣之分,只是各有所長。如果我們需要提取首個手機號,可以使用VLOOKUP;如果是提取最后一個手機號,可以使用LOOKUP。 2, 四個公式都用到了MID(A2,ROW($1:$50),11)語句。該語句的意思是,從A2單元格的第1~50位的位置分別提取11個字符。只所以提取11個字符是因為手機號為11位。 =MAX(IFERROR(--MID(A2,ROW($1:$50),11),0)) --MID()是將MID函數(shù)的計算結(jié)果轉(zhuǎn)換為數(shù)值,當(dāng)MID函數(shù)的計算結(jié)果為純文本時,減負(fù)運算將返回錯誤值,因此使用IFERROR函數(shù)將錯誤值轉(zhuǎn)換成0,最后使用MAX函數(shù)提取最大值。 =MIN(IFERROR(--MID(A2&'a',ROW($1:$50),11),'T')) 和MAX函數(shù)套路不同的是,MID的第一參數(shù)為A2&'a',這是防止數(shù)值存在單元格尾部時,造成公式計算錯誤。IFERROR將錯誤值屏蔽為文本”T”,是因為MIN函數(shù)計算時會忽略文本值,此處的”T”可以替換為其它文本字符,例如“星光”,”” “親愛的”等等。 =VLOOKUP(,MID(A2,ROW($1:$50),11)*{0,1},2,) VLOOKUP的第一參數(shù)是0,公式做了省略處理。 MID(A2,ROW($1:$50),11)*{0,1},通過MID函數(shù)的計算結(jié)果和常量數(shù)組{0,1}之間運算,產(chǎn)生了兩列50行的二維數(shù)組,從中查詢首個數(shù)值。 =-LOOKUP(,-MID(A2&'a',ROW($1:$50),11)) LOOKUP的查找值為0,公式做了省略處理。 -MID(A2&'a',ROW($1:$50),11),該部分的計算結(jié)果有兩種,一種為錯誤值,一種是小于等于零的數(shù)值。LOOKUP找到最后的數(shù)值后,再進(jìn)行一次減法運算,將計算結(jié)果轉(zhuǎn)換為正數(shù)。 數(shù)據(jù)分析就用Excel |
|