小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

VLOOKUP和MATCH函數(shù)的近似匹配必須排序嗎?其實(shí)未必!理解近似匹配原理,才能靈活使用這個(gè)函數(shù)

 zonge 2025-07-07 發(fā)布于湖北

圖片


前面其中的公式使用了MATCH函數(shù)的近似匹配模式,公式是這樣的,

=IF(  B13="",  "",  B13-INDEX(        B$2:B12,        MATCH(10^9,B$2:B12,1)  ))

其中,MATCH函數(shù)引用了B2:B12區(qū)域,該區(qū)域是這樣的,

圖片

有好幾位朋友通過各種方式跟我討論:MATCH函數(shù)的近似匹配模式不是需要對(duì)查找區(qū)域進(jìn)行排序嗎?為什么這里的源數(shù)據(jù)沒有排序呢?

這個(gè)問題涉及到近似匹配的原理的細(xì)節(jié)了。好在這個(gè)原理其實(shí)并不復(fù)雜,這里我就借機(jī)解釋一下。

本文的內(nèi)容對(duì)VLOOKUP,MATCH的近似匹配模式,XLOOKUP和XMATCH函數(shù)的二進(jìn)制搜索模式,LOOKUP函數(shù)等都適用。

近似匹配回顧

首先簡單回歸一下近似匹配模式。

假設(shè)我們需要對(duì)一組同學(xué)的成績進(jìn)行評(píng)估,標(biāo)準(zhǔn)如下:

90 <= grade,  "A"

80 <= grade < 90, "B"

70 <= grade < 80, "C"

grade < 70, "D"

圖片

這時(shí),我們可以使用VLOOKUP函數(shù)的近似匹配直接在B列中得到每一個(gè)人的評(píng)估結(jié)果。

為了簡單起見,我們只要求返回每一個(gè)人的成績對(duì)應(yīng)標(biāo)準(zhǔn)區(qū)間的下邊界。

就可以使用MTACH函數(shù)的近似匹配:

=MATCH(A2,$D$2:$D$5,1)

圖片

比如A2的成績?yōu)?2,代表低于70分的區(qū)間,這個(gè)區(qū)間的下邊界就是0,所以返回1,即標(biāo)準(zhǔn)中的第一個(gè)值。

我們知道,當(dāng)MATCH的第三個(gè)參數(shù)設(shè)為1時(shí),代表使用近似匹配,而且返回的是:

比查找值小的所有值中的最大值。

比如,查找值為:85,Excel就在查找區(qū)域:D2:D5 中查找所有小于85的數(shù),顯然,這包括前面三個(gè):{0, 70, 80},其中最大的是第三個(gè),因此返回值為3。

為什么要求排序呢?

這里就必須說到近似匹配的原理了。

近似匹配的原理

近似匹配使用的是二分法。

比如,

圖片

j假如我們要在綠色的數(shù)據(jù)中為數(shù)字:35 找到一個(gè)位置插進(jìn)去,

很明顯,這個(gè)位置就在30和35之間。

但是計(jì)算機(jī)怎么才能快速找到呢?

第一步,計(jì)算機(jī)找到最中間的一個(gè)位置,

圖片

因?yàn)榭偣?0個(gè)數(shù),所以中間位置為第10和11個(gè)數(shù)中間,取中間值為47.5,這個(gè)中間值將原來的數(shù)字分為左右兩部分,每部分只要10個(gè)數(shù)。

然后將中間值與要查找的數(shù):33比較,顯然有:33 < 47.5。

因?yàn)榫G色數(shù)據(jù)是升序排列的。所以,這個(gè)比較說明35這個(gè)數(shù)的位置一定在左邊。

于是,問題就變成了在更小的一組數(shù)據(jù)中定位 35 的位置:

圖片

繼續(xù)采用同樣的方法,

圖片

這次,每一部分只有5個(gè)數(shù),中間值為 22.5。

將中間值與 33 比較,得到 22.5 < 33。

這說明,我們要找的數(shù)在右半部分,

圖片

繼續(xù)二分,

圖片

這次,只有5個(gè)數(shù),所以中間數(shù)也只有一個(gè),就是35,與 33 比較,得到:

33 < 35,

所以要找的數(shù)在左邊,

圖片

繼續(xù)二分,

圖片

這次,很明顯,中間值是 27.5,與 33 比較,得到:

30 < 33,

因此,要找的位置在右邊,

圖片

由于右邊只有一個(gè)數(shù)了,所以它就是我們要找到的位置。

排序的原因

從上邊的示例可以看出,之所以要求查找區(qū)域排序,就是為了可以根據(jù)每次的比較結(jié)果判斷要找的位置在左邊還是右邊。

如果沒有排序,就不能得到這個(gè)結(jié)論。如果還是采用同樣的步驟計(jì)算的話,就有可能不能得到正確結(jié)果了。

VLOOKUP,MATCH,LOOKUP函數(shù)中的近似匹配都是采用得這種二分法。所以都要求排序。

從上面的示例可以看出,這種方法查找速度非???。所以,我們會(huì)采用這種原理來優(yōu)化公式計(jì)算速度。(詳細(xì)介紹見Excel中的15個(gè)查找公式速度大比拼!是騾子是馬牽出來遛一遛就知道了。

其實(shí),在MATCH函數(shù)的近似匹配的介紹中,近似匹配的行為是:

比查找值小的所有值中的最大值。

圖片

要實(shí)現(xiàn)這種行為根本不用排序啊。

確實(shí),所以,在XLOOKUP函數(shù)XMATCH函數(shù)中,就有不使用二分法也可以實(shí)現(xiàn)近似匹配的現(xiàn)象。

為什么不排序?

回到本文開頭的問題,為什么我們不再需要排序了呢?

這是因?yàn)槲覀円鉀Q的問題與上面的問題是不同的。

上面的問題中,我們要找的是一個(gè)數(shù)字的準(zhǔn)確位置。在這里,我們要找的是最后一個(gè)發(fā)生的數(shù)字:

圖片

轉(zhuǎn)換為查找問題的話,就是下圖所示,

圖片

我們要查找的數(shù)為:10000,(其實(shí)這個(gè)數(shù)具體是多少不重要,只要大于查找區(qū)域所有樹即可)

我們的目標(biāo)是找到這個(gè)數(shù)在綠色數(shù)組中的位置。

使用二分法,首先找到中間位置,

圖片

中間值是50,與查找值進(jìn)行比較,可以得到:50 < 10000,

所以,要找的位置在右邊。

這個(gè)過程可以往下繼續(xù)。由于查找值大于原始數(shù)組中的任意值,所以,查找值大于任何中間值,每次都會(huì)判定要找的位置在右邊。

圖片

直到如果中間值為空白單元格。

當(dāng)進(jìn)行比較時(shí),空白單元格大于任意數(shù)值(你可以自己排序看看,空白單元格在升序中一定排在最后),當(dāng)然也就大于查找值。

所以,這次判定為要找的位置在左邊。

圖片

左邊只有一個(gè)數(shù)了,查找過程結(jié)束了,這個(gè)位置就是我們要找的最后一個(gè)數(shù)。

從這個(gè)例子可以看出,只要查找值足夠大,就可以使用二分法找到最后一個(gè)有實(shí)際數(shù)值的位置。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多