Hello,
這裡分享一個對index+match嵌套的小總結~~
<strong>表
首先呢,index+match嵌套的最基本格式如下:
<strong>index(序列1,match(值,序列2,0))
其含義為:根據“值”在序列2中的位置,得出序列1中相同位置的值(模糊查找時,最後參數也可能是1、-1)。
這個看似和vlookup很像,但它不需要源數據的嚴格對齊,也不需要查找值必須在首列,更為靈活一些~
實例如下:
這樣的反向查找,其實用vlookup、lookup、index+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,序列2是C2:C9,查找值是E3。以上,可見3者異同。
裡
除了以上的基本情景,index+match嵌套也可能會用在其他的怪異需求中。
比如下面的例子:要將B列內容各自重複C列指定的次數,形成一個新的序列。
首先,我們想到用INDEX來提取B列內容:
=INDEX($B$14:$B$17,<strong>X)
只是,這個X應該是什麼呢?它得是一個在下拉的時候,前6個取值是1,然後2個2,然後5個3,然後3個4,這樣的序列。
我們自然想到,先將頻次序列{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)
(下拉)
此時,成功獲得了想要的序列X,那麼將它替換回原公式,即:
=INDEX($B$14:$B$17,IFERROR(MATCH(ROW(A1)-1,{6,8,13,16},1)+1,1) )
(下拉)
如此,目的實現。
<strong>最後,還有一個問題,即公式中的累計序列如何計算得到?這可以用offset選定區域並求和獲得:
=SUBTOTAL(9,OFFSET($C$14,,,ROW($1:$4),1))
(此為數組公式)
即將C14分別向下1、2、3、4格的區域求和。
用以上公式替代掉{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))
以上是數組公式,需三鍵結束,下拉。
備註:
=MATCH(, , 1) 1是模糊查找,才會形成前數與後數差的數 。
SUBTOTAL 可以用SUM代替,數組公式,需選取求值的區域 三鍵結束
SUM(OFFSET($C$14,,,ROW($1:$4),1))體現了一個累加求和的方法
閱讀更多 薄荷草1977 的文章