1.前言
Microsoft Excel是Microsoft爲使用Windows和Apple Macintosh操作系統的電腦編寫的一款電子表格軟件。直觀的界面、出色的計算功能和圖表工具,再加上成功的市場營銷,使Excel成爲最流行的個人計算機數據處理軟件。由於他借組公式發揮很強的計算、數據處理能力,所以涉及範圍極廣,從財務報表到工程預算,他也可以成爲家庭收支計算的重要利器。在和同事閒聊的時候一把也會用Vlookup函數衡量你對excel的掌握程度,然後他真的有這麼強的嗎,有沒有可以取代他的函數?那麼這次,我們主要從Excel的公式入手,分析一下他裏面的涉及到的lookup的三個函數,因爲他們可以讓我們達到事半功倍的效果。那麼lookUp究竟是什麼呢,讓我們繼續往下看。
2. LookUp函數
2.1 基本語法
2.1.1 語法一
=LOOKUP(lookup_value,lookup_vector,[result_vector])
參數:
lookup_value:要查找的值。
lookup_vector:需要查找的列
result_vector:可選,通過loolup_value在looup_vector查找到值,對應此選擇列的值。
案例:
我爲此準備了試驗數據:
首先我們明確lookup查找的方式是通過二分查找法實現的,所以對於被查詢列必須排序,否則會出現問題。好了,我們就分析一下他的執行順序。我們以6000爲例。step1,數據源爲5列,所以二分位爲pos = int((5+1)/2) = 3,位置3所對應的數值爲3000,excel認定比6000小,應該從下面查找。接下來數據範圍變成4500、9000,索引位置是pos = int((2+1)/2) = 1,即所對應的位置是4500,比6000還小,繼續查找,發現9000比6000大,所以按照上一個索引位置作爲輸出值,即輸出20。
我們進一步做一分析,對於這個公式的三個參數(數值,數組1,數組2),後面兩個數組的個數是一致的,而且保證一一對應。公式執行邏輯是利用二分查找法進行查詢。直到查到爲止(如果查不到,按照上一個遍歷值爲匹配項),根據數組1的匹配項的索引值在數組2獲取到數值作爲返回值。所以我們就有了如下的公式變形:
=lookup(1,0/(查找值=查找列),結果列)
他能做什麼事呢?我們看一下例子:
好像可以實現vlookup的功能,是不是很強大了。接下來我們在做幾個變種:
1)逆向查找,這是vlookup所不具備的,就是我們查找的列在後面,返回的數據在前面。
2)多條件查詢
2.1.2 語法二
=LOOKUP(lookup_value,array)
參數:
lookup_value:要查找的值。
array:要查詢的數組,並返回
這個公式依然使用二分查找法的思路,只不過功能相對於語法一遜色了不少,這個也許就是excel先前版本的公式吧。
3. VLookUp函數
=vlookup(looup_value,table_array,col_index,[range_lookup])
參數:
lookup_value:要查找的值。
table_array:要查詢的數據區域,是一個表格
col_index:返回的數據相對於匹配項的第一列
[range_lookup]:是否精確匹配。如果是0,爲精確匹配;如果是1,近似匹配,但是首列的值必須排序。也就是說,如果是近 似匹配,他任然和lookup一樣,採取二分查找法進行尋找匹配項。
在vlookup函數中,他的四個參數(數值1,表格1,數值2,標誌位)。我們以第一列說,河北在表格表格1查找,在第一行找到記錄,所以返回表格1的第數值2列的數據,即爲10。
如果我們現在把數據源兩列換一下位置,數值2變爲-1,因爲是在左邊,看看輸出什麼結果:
我們發現差不到信息。這也驗證了上面提到的vlookup不能逆向查詢數據。是不是感覺lookup函數的強大之處了。
我們在做一個試驗:
通過上面的可以看出,查詢的數據只對於表格第一行查詢。
關於近似匹配輸出什麼樣的結果:
我們發現和lookup的功能差不多,這裏就不多說了。
3. HLookUp函數
這個函數我們用的不是很多,但是作爲lookup函數的一個成員,我們簡單說一下。
首先,我們先看一下語法:
=Hlookup(looup_value,table_array,row_index_num,[range_lookup])
參數:
lookup_value:要查找的值。
table_array:要查詢的數據區域,是一個表格
row_index_num:要返回哪一行的數據
[range_lookup]:是否精確匹配。如果是0,爲精確匹配;如果是1,近似匹配,但是首列的值必須排序。也就是說,如果是近 似匹配,他任然和lookup一樣,採取二分查找法進行尋找匹配項。
上圖中顯示的公式是A11列的公式。這個函數是找A10的值5從A1:J1中找到匹配項,這裏找到索引位置爲5(E列),然後返回第二行所對應的數據E2(15)。
至於近似匹配和上面的公式一樣,採用二分查找法的方式實現。這裏就不舉例了,大家有興趣的可以嘗試一下。
4.總結
講到這裏,是不是感覺lookup函數家族的強大,同時是不是從此放棄vlookup函數,喜歡上lookup函數了。哈哈,其實每個函數都有他存在的必要性,雖然lookup顯得強大,但是這種複雜的語法讓人不好接受,同時vlookup可以實現爲和還要給自己找事呢,你們說對吧?