大家好,前面我們介紹過 Lookup 函數(shù)的基本用法。(文章見文末!)=LOOKUP(lookup_value,lookup_vector,[result_vector]) =LOOKUP(查找值,查找區(qū)域,[返回區(qū)域)
之前提到:使用 Lookup 函數(shù)時,必須先對第二參數(shù)「查找區(qū)域」進(jìn)行升序處理。這時就有小伙伴納悶了:寫函數(shù)公式,還要時刻注意給原來的數(shù)據(jù)排序,這也太麻煩了!請往下看!不怕,以 G5 單元格中的公式為例,我們先來看看公式解析~=LOOKUP(1,0/(F3=B3:B12),D3:D12)
? F3=B3:B12 先判斷 B3:B12 (姓名列)是否等于 F3('楊山')。如果是,則返回 True,否則返回 False。這時形成由 True 和 False 組成的數(shù)組。? 0/({FALSE;FALSE......}),用 0 除以判斷結(jié)果形成的數(shù)組。0/TRUE=0,0/FALSE=#DIV/0!(在四則運(yùn)算中,True 相當(dāng)于 1,F(xiàn)alse 相當(dāng)于 0),形成由 0 和#DIV/0!組成的數(shù)組。? Lookup 函數(shù)先在「查找區(qū)域」中查找與 1 匹配的值。如果找不到,則繼續(xù)找小于且最接近查找值的數(shù)值。在「查找區(qū)域」中 0 最接近 1,所以結(jié)果返回 0 對應(yīng)的 D3:D12 中的數(shù)據(jù)(85)。PS:Lookup 函數(shù)是根據(jù)二分法進(jìn)行跳躍式查找的,它會忽略#DIV/0!錯誤值,所以查找區(qū)域中僅存在數(shù)值 0,且 0 也是小于等于 1 的數(shù)值。簡言之,這個公式的關(guān)鍵在于第 2 參數(shù):0/(F3=B3:B12)生成一個由數(shù)值 0 和錯誤值#DIV/0! 組成的數(shù)組。再從這個數(shù)組中找到小于或等于 1 的最大值 0,最后返回第 3 參數(shù):D3:D12 對應(yīng)的值。 敲黑板:當(dāng)我們碰到單條件查找的問題時,可以按照下面的公式直接套用!=LOOKUP(1,0/(條件=條件區(qū)域),返回區(qū)域) 以 F3 作為條件,B3:B12 為條件區(qū)域,C3:C12 為返回區(qū)域,套用:=LOOKUP(1,0/(條件=條件區(qū)域),返回區(qū)域)
=LOOKUP(1,0/(F3=B3:B12),C3:C12) 既然有單條件查詢的套路公式,那自然有 Lookup 函數(shù)多條件查詢的套路公式。繼續(xù)往下看!Lookup 函數(shù)多條件查詢的套路公式:=LOOKUP(1,0/((條件 1=條件區(qū)域 1)*(條件 2=條件區(qū)域 2)*…*(條件 n=條件區(qū)域 n)),返回區(qū)域) 如下圖,根據(jù)采購日期和貨品名稱,查找對應(yīng)的單價。=LOOKUP(1,0/(F3=B$3:B$8)*(G3=C$3:C$8),C$3:C$12)
前面講的都是文本的精確匹配,那如果是文本的模糊匹配,我們應(yīng)該怎么做呢?這時候我們還需要借助一個 FIND 函數(shù)~欲知詳情,往下看!=LOOKUP(1,0/FIND(查找區(qū)域,查找值),返回區(qū)域) 看案例!根據(jù)類別(簡稱)查商品名稱(全稱)。=LOOKUP(1,0/FIND(E$3:E$10,B3),E$3:$E10)
簡單解釋一下,這個函數(shù)公式運(yùn)算的原理~Find 是用來返回一個字符串在另一個字符串中出現(xiàn)的起始位置(區(qū)分大小寫)。=FIND(find_text,within_text,[start_num]) =FIND(查找值,在哪里找,從第幾個字符開始查找)
=LOOKUP(1,0/FIND(E$3:E$10,B3),E$3:$E10)
? 利用 Find 函數(shù)查找「簡稱在全稱的位置情況」,如果找得到,數(shù)組對應(yīng)就是位置的起始位置;如果找不到,則對應(yīng)返回#VALUE 錯誤值。? 0/({#VALUE;#VALUE......}),用 0 除以 find 函數(shù)查找的結(jié)果形成的數(shù)組,0/錯誤值=錯誤值,0/數(shù)值=0,最后形成由 0 和#VALUE 組成的數(shù)組。? 由于 Lookup 函數(shù)可以忽略錯誤值,所以,Lookup 函數(shù)先在查找區(qū)域中查找小于等于 1 的最大值,也就是 0,最后返回 0 的對應(yīng)區(qū)域,也就是「便服」。看到這里,大家是不是對 Lookup 函數(shù)的特殊用法:Lookup(1,0/(條件區(qū)域))有了進(jìn)一步的認(rèn)識呢?? Lookup 函數(shù)第 2 參數(shù)可以通過構(gòu)造 0/(條件)的形式,實(shí)現(xiàn)在亂序中進(jìn)行查找。? Lookup 函數(shù)三種經(jīng)典用法:=LOOKUP(1,0/(條件=條件區(qū)域),返回區(qū)域)
=LOOKUP(1,0/((條件 1=條件區(qū)域 1)*(條件 2=條件區(qū)域 2)*…*(條件 n=條件區(qū)域 n)),返回區(qū)域)
=LOOKUP(1,0/FIND(查找區(qū)域,查找值),返回區(qū)域)
|