close

475

INDEX函數與MATCH函數嵌套使用技巧

示範檔

範例檔

475.XLSX

結果檔

這裡分享一個對INDEX函數與MATCH函數嵌套的小總結~~

首先呢,INDEX函數+MATCH函數嵌套的最基本格式如下:

INDEX(序列1,MATCH(,序列2,0))

其含義為:

根據「值」在序列2中的位置,得出序列1中相同位置的值(模糊查找時,最後參數也可能是1-1)

這個看似和VLOOKUP函數很像,但它不需要來源資料的嚴格對齊,也不需要查找值必須在首欄,更為靈活一些~

實例如下:

image

這樣的反向查找,其實用VLOOKUPLOOKUPINDEX+MATCH都是可以做到的,3個公式分別如下:

VLOOKUP法:

=VLOOKUP(E3,IF({1,0},$C$2:$C$9,$B$2:$B$9),2,FALSE)

LOOKUP法:

=LOOKUP(1,0/($C$2:$C$9=E3),$B$2:$B$9)

INDEX+MATCH法:

=INDEX($B$2:$B$9,MATCH(E3,$C$2:$C$9,0))

這個基本實例中,序列1就是B2:B9,序列2C2:C9,查找值是E3。以上,可見3者異同。

除了以上的基本情景,INDEX+MATCH嵌套也可能會用在其他的怪異需求中。

 

比如下面的例子:要將B欄內容各自重複C欄指定的次數,形成一個新的欄序列。

image

首先,我們想到用INDEX來提取B欄內容:

=INDEX($B$14:$B$17,X)

只是,這個X應該是什麼呢?

它得是一個在下拉的時候,前6個取值是1,然後22,然後53,然後34,這樣的序列。

我們自然想到,先將頻次序列{6,2,5,3}變成累計序列{6,8,13,16},然後從0開始對它進行模糊查找,如下:

=MATCH(ROW(A1)-1,{6,8,13,16},1)

(下拉)

這時,得到了這樣一個序列:

{#N/A,#N/A,#N/A,#N/A,#N/A,#N/A,1,1,2,2,2,2,2,3,3,3}

這個序列,離我們想要的序列還有兩點不同:1都變成了錯誤值,後面的取值也都少了1;據此可以在後面+1,前面增加IFERROR

=IFERROR(MATCH(ROW(A1)-1,{6,8,13,16},1)+1,1)

向下拉到F36,此時,成功獲得了想要的序列X,那麼將它替換回原公式,即:

=INDEX($B$14:$B$17,IFERROR(MATCH(ROW(A1)-1,{6,8,13,16},1)+1,1) )

向下拉到F36,如此,目的實現。

最後,還有一個問題,即公式中的累計序列如何計算得到?

這可以用OFFSET選定區域並求和獲得:

=SUBTOTAL(9,OFFSET($C$14,,,ROW($1:$4),1))

此為陣列公式,即將C14儲存格分別向下1234格的範圍求和。

用以上公式替代掉{6,8,13,16},則最終的公式為:

=INDEX($B$14:$B$17,IFERROR(MATCH(ROW(A1)-1,SUBTOTAL(9,OFFSET($C$14,,,ROW($1:$4),1)),1)+1,1))

以上是陣列公式,需按 Ctrl +Shift +Enter鍵,再向下拖曳,結果如下圖所示。

image

 


arrow
arrow

    錦子老師 發表在 痞客邦 留言(0) 人氣()