【公式解析系列】之LOOKUP(2,1/(條件),查找數(shù)組或區(qū)域) 寫在前面的話: 不要迷戀二分法,,二分法只是個傳說。 因?qū)OOKUP二分法的研究,,可能讓人看起來貌似gouweicao78水平很高深,。但本人一方面盡力讓大家能看懂它,另一方面并沒有提倡過大家一定要看懂二分法,,因為升序查找,,不需動用“二分法”,僅函數(shù)幫助也能說明白,。對于這個原理的探究,,僅僅是函數(shù)發(fā)燒友們的樂趣。 怎樣看待LOOKUP的“高效函數(shù)”之稱 第一,,LOOKUP使用二分法原理,,因此具有極高效率的運算方式;但是只推薦升序查找用它,,升序的時候,。 第二,LOOKUP(2,1/(條件),……,,盡管是因為“二分法”讓LOOKUP能找到最后一個滿足條件的記錄,,但是,“條件”,,比如(A1:A10="張三")——首先是一個數(shù)組運算,,然后1/條件又來一次數(shù)組運算,最終才用LOOKUP二分法,。這么一個“普通公式”中暗藏數(shù)組運算的東西,,讓“高效函數(shù)”背上了黑鍋,。 【正文】 LOOKUP函數(shù)有一個經(jīng)典的條件查找解法,通用公式基本可以寫為:
1,、公式中的2、1,、0等數(shù)字有什么含義,,明明在查找條件與這3個數(shù)字根本毫無聯(lián)系,怎么能得到正確結(jié)果,? 2,、明明LOOKUP函數(shù)說明需要“升序”查找,否則可能無法返回正確的值,,上面這種解法又是如何得改變這一說法呢,? 3、據(jù)說LOOKUP函數(shù)的查找順序是“二分法”,,并且有流程圖可循,,是否可以結(jié)合此例進(jìn)行講解? 【函數(shù)幫助信息摘錄】 語法:LOOKUP(lookup_value, lookup_vector, result_vector) 1,、[要點] lookup_vector 中的值必須以升序排列:...,-2, -1, 0, 1, 2, ..., A-Z, FALSE, TRUE,。否則,LOOKUP 可能無法返回正確的值,。大寫文本和小寫文本是等同的,。 2、如果 LOOKUP 函數(shù)找不到 lookup_value,,則它與 lookup_vector 中小于或等于 lookup_value 的最大值匹配,。 3、如果 lookup_value 小于 lookup_vector 中的最小值,,則 LOOKUP 會返回 #N/A 錯誤值,。 【釋疑】簡要地說,從邏輯推理來看: 1,、首先,,條件是一組邏輯判斷的值或邏輯運算得到的由TRUE和FALSE組成或者0與非0組成的數(shù)組,因而:1/(條件)的作用是用于構(gòu)建一個由1或者#DIV!0錯誤組成的值,。 2,、根據(jù)LOOKUP函數(shù)說明中的這一條: 如果 LOOKUP 函數(shù)找不到 lookup_value (即:2),則它與 lookup_vector 中小于或等于 lookup_value 的最大值(即:1)匹配,。 也就是說,,要在一個由1和#DIV!0組成的數(shù)組中查找2,肯定找不到2,因而將返回小于或等于2的最大值(也就是1)匹配,。 為什么要用2來查找1或用1來查找0呢,?因為如果有多個與第1參數(shù)相等的值,則Lookup就不一定返回“最后一個”所對應(yīng)的記錄,,所以必須養(yǎng)成一個良好習(xí)慣,, 而不要用:LOOKUP(1,1/(條件),……,或LOOKUP(,0/(條件),…… 3,、如果有多個滿足條件的紀(jì)錄,,為何只返回最后一個,而不是第一個或其他呢,?這個解釋就需要二分法流程圖的模擬了。而對于一般使用者來說,,只需要記住“查找滿足條件的最后一個記錄”可以使用通用公式
gouweicao78《Lookup函數(shù)二分法模擬器》 willin2000修正后的《LOOKUP查找策略完整流程圖》 |
|