Excel 【公式解析系列】之LOOKUP(2,1/(條件),查找數組或區域)

【公式解析系列】之LOOKUP(2,1/(條件),查找數組或區域) 寫在前面的話:不要迷戀二分法,二分法只是個傳說。因對LOOKUP二分法的研究,可能讓人看起來貌似gouweicao78水平很高深。但本人一方面儘力讓大家能看懂它,另一方面並沒有提倡過大家一定要看懂二分法,因為升序查找,不需動用「二分法」,僅函數幫助也能說明白。對於這個原理的探究,僅僅是函數發燒友們的樂趣。怎樣看待LOOKUP的「高效函數」之稱第一,LOOKUP使用二分法原理,因此具有極高效率的運算方式;但是只推薦升序查找用它,升序的時候。第二,LOOKUP(2,1/(條件),……,儘管是因為「二分法」讓LOOKUP能找到最後一個滿足條件的記錄,但是,「條件」,比如(A1:A10="張三")——首先是一個數組運算,然後1/條件又來一次數組運算,最終才用LOOKUP二分法。這麼一個「普通公式」中暗藏數組運算的東西,讓「高效函數」背上了黑鍋。【正文】LOOKUP函數有一個經典的條件查找解法,通用公式基本可以寫為:

  1. LOOKUP(2,1/(條件),查找數組或區域)
  2. LOOKUP(1,0/(條件),查找數組或區域)

複製代碼很多初學者對此感覺非常詫異就,主要疑惑有:1、公式中的2、1、0等數字有什麼含義,明明在查找條件與這3個數字根本毫無聯繫,怎麼能得到正確結果?2、明明LOOKUP函數說明需要「升序」查找,否則可能無法返回正確的值,上面這種解法又是如何得改變這一說法呢?3、據說LOOKUP函數的查找順序是「二分法」,並且有流程圖可循,是否可以結合此例進行講解?【函數幫助信息摘錄】語法:LOOKUP(lookup_value, lookup_vector, result_vector)1、[要點]lookup_vector 中的值必須以升序排列:...,-2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE。否則,LOOKUP 可能無法返回正確的值。大寫文本和小寫文本是等同的。2、如果 LOOKUP 函數找不到 lookup_value,則它與 lookup_vector 中小於或等於 lookup_value 的最大值匹配。 3、如果 lookup_value 小於 lookup_vector 中的最小值,則 LOOKUP 會返回 #N/A 錯誤值。 【釋疑】簡要地說,從邏輯推理來看:1、首先,條件是一組邏輯判斷的值或邏輯運算得到的由TRUE和FALSE組成或者0與非0組成的數組,因而:1/(條件)的作用是用於構建一個由1或者#DIV!0錯誤組成的值。2、根據LOOKUP函數說明中的這一條:

如果 LOOKUP 函數找不到 lookup_value (即:2),則它與 lookup_vector 中小於或等於 lookup_value 的最大值(即:1)匹配。

也就是說,要在一個由1和#DIV!0組成的數組中查找2,肯定找不到2,因而將返回小於或等於2的最大值(也就是1)匹配。為什麼要用2來查找1或用1來查找0呢?因為如果有多個與第1參數相等的值,則Lookup就不一定返回「最後一個」所對應的記錄,所以必須養成一個良好習慣,而不要用:LOOKUP(1,1/(條件),……,或LOOKUP(,0/(條件),……3、如果有多個滿足條件的紀錄,為何只返回最後一個,而不是第一個或其他呢?這個解釋就需要二分法流程圖的模擬了。而對於一般使用者來說,只需要記住「查找滿足條件的最後一個記錄」可以使用通用公式

  1. LOOKUP(2,1/(條件),查找數組或區域)
  2. LOOKUP(1,0/(條件),查找數組或區域)

複製代碼【參考鏈接】在此帖:[函數用法討論系列10] LOOKUP的查找策略!gouweicao78《Lookup函數二分法模擬器》willin2000修正後的《LOOKUP查找策略完整流程圖》
推薦閱讀:

辰戌八字命理---生克制化刑沖合害的條件及具體要求
借車給他人出事故,什麼條件下車主不承擔責任?
「假從」可富可貴,需要怎樣的條件?
回天的五個條件
2018繼承法:老人生前立遺囑,必須要滿足的5個條件(建議收藏)

TAG:公式 | Excel | 查找 | 解析 | 條件 | 數組 | 區域 |