標籤:

Lookup從入門到精通,一學就會!

Vlookup和lookup兩函數只相差一個字,但境遇卻是天壤之別,Vlookup廣受歡迎大行其道,lookup卻鮮有人問津。之所以出現這樣的情況主要是由於 Vlookup函數的易用性及Lookup這個心機婊的小怪癖,導致lookup函數一直被Vlookup函數壓制,遲遲不能被大眾所接受。其實Lookup函數在很多方面比Vlookup更優秀呢,下面我們將由易到難的講解lookup函數和它那些經典的瞬間。

  • 入門篇

  • Lookup是查找引用公式的一種,主要功能是從單行(單列)區域或者從一個數組中查找某個值,並返回相應的值。它有兩種用法:

    1. 向量形式:在單行區域或單列區域(稱為「向量」)中查找值,然後返回第二個單行區域或單列區域中相同位置的值。

    2. 數組形式;在數組的第一行或第一列中查找指定的值,然後返回數組的最後一行或最後一列中相同位置的值。

    下例中我們就分別採用了兩種方式來計算排名第3的銷售員和銷量。

    注意:lookup是個有強迫症的處女座,房子太亂了它是不會認真工作的。所以查找數據區域必須是按升序排列的才能得出正確的結果,如果不按升序排列是得不到正確值的,如果真的得到正確值,那恭喜你可以去買張彩票了。

    下圖公式沒變,只是調整了一下數據行的順序,就得出莫名其妙的結果,如下:

  • 初級篇

  • 有些同學受不了lookup臭脾氣(非要查找數據按升序排列)。覺得這些功能明明用Vlookup就可以實現,為什麼要了解lookup函數呢,那是因為lookup函數可以實現一些vlookup實現不了的功能。譬如vlookup沒法直接逆序查找(即從右到左的查找)但lookup可以,而且,通過構建一個自定義向量,我們可以實現精確查找。看下面的例子:

    公式的計算原理如下:我們要找殺敵最多的武將,正常的做法是首先用MAX函數找出最大殺敵數,然後在殺敵數列中查找這個值,然後,返回武將列中對應位置的武將。但是因為殺敵數列中的數據並不是升序排列的,因此,我們沒法取得正確值。

    這個時候我們就需要做些變通了,我們需要構建一個查找向量,在本例中我們用公式「0/(C3:C14=MAX(C3:C14))」構建一個向量。這個公式的意思是,如果單元格值等於最大值,結果就為TRUE,TRUE作為被除數的時候會被轉化為1,這樣1/true就等於0,如果單元格值不為最大值,結果就是FALSE,FALSE作為被除數的時候會被轉化為0,這樣0/false就會顯示錯誤值,這樣就構建了一個由0和錯誤值構成的向量數組,如下:

    Lookup在向量中查找的時候會忽略掉錯誤值,這樣整個向量中就只有一個0值是有效的,就不存在排序的概念了,我們通過在向量中查找0值,最後找到殺敵最多的武將就是趙雲了。

    第二個公式的原理也是一樣,用公式「0/(C3:C14=1000)/(D3:D14=800)」,創建一個向量,將同時滿足殺敵數等於1000,自損數等於800的賦值為0,將不能同時滿足條件的賦上錯誤值,構建一個由0和錯誤值構成的數組,如下:

    最後Lookup會忽略錯誤值,找到殺敵一千自損八百的武將為呂布。

    這兩個公式就是lookup函數的典型用法,歸納起來就是「=Lookup(0,0/(條件1)/(條件2)/(條件*),目標區域)」,可以用單條件也可以用多條件。

  • 中級篇

  • 除了可以逆序查找之外,Lookup相比Vlookup有優勢的地方是Lookup相比Vlookup查詢效率更高,Vlookup查詢數據採用遍曆法,而lookup採用二分法查詢數據。

    怎麼更解這個呢?譬如說,現在有一個從1-100的數列,要找到100。Vlookup從1開始找一直找到100,找100次;而Lookpu會從數據中間開始找,先找51,51比100小,再接著找75,還是小再找87...,反正就是每次從剩下的數據中間開始找,lookup通過7次就可以找到100。看起來好像也沒什麼,但是,當你表格里有幾百上千個Vlookup函數的時候再看看吧,那是卡的想哭啊。

    剛才講到二分法了,其實利用Lookup函數的二分法,我們可以實現一些特殊的功能哦,例如:

    公式的計算原理是:座是一個編碼較大的字元,當我們輸入公式「=Lookup("座",A:A)的時候會返回A列最後一個文本,這是因為Lookup是採用二分法查找數據,並且默認數據是按升序排列的,越往後越大。所以,如果查找值大於數據列中的所有數據,Lookup會一直向後查找直到找到最後一個值。

    如果要查詢一列中最後一個數值是多少,我們可以用公式「=Lookup(2^16,A:A)」,公式原理也是一樣,2^16也是一個特別大的數。

    在本例中我們就是利用Lookup返回選區中最後一個值的特性,為每個單元格建立一個可變選區,選區的最後一個單元格為當前單元格的上一格,這樣就實現了自動填充的效果。

  • 高級篇

  • 利用LOOKUP以上特性與其他函數進行結合可以實現很多特殊的目的,例如,我們有一張表格提供了不同級別武將的帶兵數。然後有一個武將的介紹表格,包含武將的名字和級別,如何將武將的帶後數添加到武將的介紹表格?這時候我們就可以通過Lookup和Find函數來解決,如下:

    公式的計算原理如下:首先用公式「0/FIND($F$3:$F$6,B3,1)」建立一個向量數組,Find函數會在B3單元格的文本中依次查找是否包含F3:F6的內容,如果有會返回位置值,否則近回錯誤值,再用0/除以位置值和錯誤值,得到一個由0和錯誤值構成的數組。再通過查找0值找到包含對應武將的帶兵數。後面再加一個IFERROR進行錯誤判斷,如果Lookup沒有找到對應的武將級別,會返回錯誤值,也就是說如果計算出錯,說明當前武將屬於其他級別武將,我們可以看到像吳國都督周瑜,在這個文本中不包含級別表中的任何級別,這時Lookup就會出錯,周瑜屬於其他級別武將,我們用IFERROR將其他級別數武將帶兵數賦予他。

    利用LOOKUP和FIND組合我們還可以為簡稱找到對應的全稱,如圖:

    公式很長,看起來很費勁的樣子,但知道公式的原理後,其實就很好理解了,最好是自己親自動手操作一遍,這些技巧就都是你的了。


    推薦閱讀:

    架子鼓入門
    陳氏相法~入門面相直分八段看法(二)
    盲派學員入門自修處
    你是什麼命【祐之預測:八字快速入門100講第4講】

    TAG:精通 | 入門 | Look |