1. 程式人生 > >用vlookup函式提取字串中的數字

用vlookup函式提取字串中的數字

iamlaosong轉載說明:最近看到一篇文章,介紹vlookup函式的別樣用法,提取字串中的數字,比如賬號、電話號碼等等,覺得很有意思,雖然用處不大,但可以促進我們更深地掌握vlookup函式,實驗了一下,很不錯,不過,只能取同樣長度的數字,對於變長的數字就無能為力了,這種情況下,還不如自己編個函式來得爽。

方法用到陣列公式,這兒說明一下,陣列公式的輸入方法是:首先輸入公式,然後按<Ctrl+Shift+Enter>組合鍵,輸入的公式就變成陣列公式了,如需要修改,修改後仍然要按<Ctrl+Shift+Enter>組合鍵結束,否則就不是陣列公式了。所謂陣列公式,就是公式的引數是一組資料的集合,要對這組集合資料進行處理,產生一個或多個結果。

該用法如下,首先看圖:


如上圖所示,是某小區多名業主的資訊表。如諸君所見,A列是業主的姓名,B列是一些有趣的資訊,要求在C列,使用VLOOKUP函式,提取出B列的手機號碼。
B列的資訊真是奇葩,除了手機號碼,還有職業,有婚姻狀況,有愛好,有雜感,有病情——這是誰胡編亂造?也太有水平了,真是讓人不得不佩服……
=VLOOKUP(,MID(B2,ROW($1:$99),11)*{0,1},2,)

在C2單元格,輸入上面的陣列公式,按<Ctrl+Shift+Enter>組合鍵結束,然後向下複製到C2:C6單元格。
簡單說下公式的含義和解題的思路:
我們知道手機號碼是由11位數字構成的。MID(B2,ROW($1:$99),11),MID函式依次從B2的第1、2、3、4……直至99個位置提取11位的資料,然後分別乘以0和1,即常量陣列{0,1}。
上述公式寫全了就是:

=VLOOKUP(0,MID(B2,ROW($1:$99),11)*{0,1},2,0),以C2祝洪忠童鞋的資訊為例,如果MID函式的結果為文字,比如“愛吃魚刺不愛吃魚真傻”,那麼乘以{0,1}後,結果為錯誤值{ #VALUE!, #VALUE!};如果MID函式的結果為數值,比如18359282475,結果為{0, 18359282475}。最終由此建立了一個2列99行的記憶體陣列,作為VLOOKUP函式的第二引數,用作查詢範圍。
VLOOKUP採用精確匹配的方式,在以上所述記憶體陣列的第一列查詢首個0出現的位置,進而返回相對應的記憶體陣列第二列的結果,於是便得到了手機號碼。
結果如下: