今天介紹的是Lookup函數(shù)誊役,不明白其中原理的新人們,總是對(duì)這個(gè)函數(shù)望而生畏谷市,在我們心中給Lookup的定義要么是"睜眼瞎",要么是"一根筋"蛔垢。出現(xiàn)這樣的原因是我們不了解 二分法的原理所造成的。我們今天就來(lái)談?wù)凩ookUp中的二分法迫悠。
二分法在具體應(yīng)用中有兩個(gè)步驟:
二分法之步驟1:確定查找方向
判斷查找方向鹏漆,具體來(lái)說(shuō)確定LookUp查找方向有這么兩個(gè)步驟:
1): 確定數(shù)據(jù)區(qū)域中間值
已知城市條件列,那么我們就可以得出A2:A9數(shù)據(jù)區(qū)域的中間列為:第四行:A5(計(jì)算公式:int((區(qū)域總行數(shù)+1)/2)创泄。
那么A5這個(gè)單元格值為杭州2艺玲。
小結(jié):所謂中點(diǎn)值就是區(qū)域行數(shù)除以2,再取整鞠抑。所對(duì)應(yīng)的單元格饭聚。
2):確定查詢(xún)方向
查詢(xún)方向有且只有兩個(gè):1、向下搁拙,2秒梳、向上
> 向下查詢(xún):已知條件值大于等于區(qū)域中分點(diǎn)單元格值
因?yàn)橐阎獥l件A12的值是杭州7,比中間點(diǎn)的值要大感混,那么就會(huì)向下查詢(xún)端幼。那么很明顯根據(jù) 杭州7 我們是查不到正確內(nèi)容的,也就是會(huì)出現(xiàn)我們常見(jiàn)的"睜眼瞎"現(xiàn)象弧满。
小結(jié):我的條件值比區(qū)域的中點(diǎn)值要大婆跑,我就向下查詢(xún)。
> 向下查詢(xún): 已知條件等于區(qū)域中點(diǎn)值庭呜,還是向下
如果是VlookUp函數(shù)犀忱,基本上就是返回西湖區(qū)了,然而神奇的LookUp卻是返回下沙扶关。所以這個(gè)可以很好的說(shuō)明在這個(gè)案例中届垫,哪怕是相等的值(條件值和中分點(diǎn)的值相等)lookup函數(shù)還向下查詢(xún)谱轨。
注意點(diǎn):這個(gè)時(shí)候向下的原則是相鄰的并且是同值的單元格對(duì)應(yīng)的值。
相鄰單元格不相等,就不在向下查找箫老,這個(gè)時(shí)候是查不到下沙的两踏,因?yàn)椴幌噜彾囟瘮?shù)直接不管了庶喜。
如果A4單元格也是杭州2,對(duì)于此次查詢(xún)毫無(wú)影響揍庄,因?yàn)椴樵?xún)方向是向下的咆蒿。
> 向上查詢(xún):條件值比中點(diǎn)單元格值小
有且只有這一種情況會(huì)導(dǎo)致查詢(xún)方向向上。
小結(jié):條件值比中分點(diǎn)小蚂子,方向就是向上沃测。
注意點(diǎn):方向向上的查詢(xún)有可能會(huì)出現(xiàn)"#N/A"的情況。
3):找合適的值
二分法只會(huì)找小于或者等于條件值對(duì)應(yīng)的區(qū)域值食茎。
能看出此處為什么找到的是蕭山嗎蒂破?
能看出為什么這里是#N/A嗎?
一個(gè)說(shuō)明:二分法會(huì)在每個(gè)子區(qū)域中董瞻,多次運(yùn)用寞蚌。
A3就作為剩下區(qū)域中的中分點(diǎn)田巴,然而它對(duì)應(yīng)的值杭州1也比我們的條件值杭州0要大钠糊,那么函數(shù)就會(huì)在剩下的區(qū)域中再次運(yùn)用二分法,進(jìn)行查找壹哺,如果到最后一條還是不符合條件值抄伍,那么就只有null。
向下查找也類(lèi)似管宵。
總結(jié):二分法是lookup函數(shù)的執(zhí)行原理截珍,看待問(wèn)題的時(shí)候,我們分為三步走的方法:
- 找到區(qū)域中分點(diǎn)
- 根據(jù)條件值和中分點(diǎn)判斷查找方向
- 多次利用二分法進(jìn)行數(shù)據(jù)區(qū)域縮小迫近
- 二分法只找目標(biāo)區(qū)域值小于等于已知條件值的數(shù)據(jù)
有了這些原理只是在心中箩朴,我們就可以清楚知道岗喉,為什么有的時(shí)候LookUp函數(shù)會(huì)查找到一些不靠譜的東西。
一個(gè)簡(jiǎn)單的練習(xí)題:下圖中B12單元格會(huì)是什么結(jié)果炸庞?