1. 程式人生 > >Excel一對多查詢(index+small+if)

Excel一對多查詢(index+small+if)

是否 .cn 我們 出現 lookup 想要 exce 思路 機構

一、學習

一對多查詢模式化數組公式:

=INDEX(區域,SMALL(IF(條件,行號數組,4^8),ROW(A1)))

三鍵齊按(ctrl+shift+回車)

在具有多個符合條件的情況下,提取和匹配方法~

技術分享圖片

我們需要解決三種類型的問題:

1,李商隱第一次出現時的B列值;

2,李商隱最後一次出現時的B列值;

3,李商隱第n次出現時候的B列值(假設n=2)。

技術分享圖片

前面兩個問題是比較常見的,我們簡要一看。

匹配第一個,可以直接用:

=VLOOKUP(E2,A2:B17,2,FALSE)

匹配最後一個,可以利用:

=LOOKUP(1,0/(A2:A17=E2),B2:B17)

這裏重點要說明的是匹配第n個。

接下來就看一下這個類型的公式(數組公式,要按Shift+Ctrl+回車 三鍵結束):

{=INDEX(B$2:B$17,SMALL(IF(A$2:A$17=E$2,ROW($1:$16),4^8),2))}

先從最裏層看:

IF(A$2:A$17=E$2,ROW($1:$16),4^8)

這個公式的結果是一個數組,它會依次判斷A列值是否等於E2指定的條件。

等於E2時,則會返回對應的行號,如1、12、13等……

不等於E2時,則直接返回4^8,也就是65536,在Excel2003版本裏,這個65536就是一列中的最大行號,一般的工作表到這裏就沒有數據了。

整個的結果就是:

{1;65536;……;65536;12;13;65536;65536;65536}

再往外看,是SMALL(X,2)

這個簡單,就是從上面得出的數組X中,選出第二小的值12,其實也就是A2:A17中的姓名第二次等於E2指定的姓名時,其序列位置。

最外層是INDEX(B2:B17,y)

上面已經用SMALL函數得出了具體的位置,這一步,就是在B2:B17中提取出這個位置的值,完成!!

以上便是INDEX+SMAll+IF的數組公式類型,掌握這個,想要匹配什麽位置,就可以匹配什麽位置~~

假如把最後一個參數n,換成ROW(A1),那麽就可以下拉公式,依次提取所有對應值了。

用INDEX(大區域,SMALL(IF(條件區域=條件,ROW(條件區域),4^8),ROW(A1)))&""這種方式去屏蔽錯誤值,這種屏蔽錯誤值的思路是,如果條件區域=條件就返回條件區域行號,否則返回一個比較大的用不到的行號,比如說4^8行或數據區域下面的一個空行行號。這樣,INDEX在輸出完所有符合條件的行後開始調用4^8行的值(空單元格),為了避免返回0所以再加上一個&""。

二、應用

查找機構下屬流失最嚴重的4個代理,橫向展示

技術分享圖片

公式如下

技術分享圖片

主要註意點,三鍵齊按、$引用

Excel一對多查詢(index+small+if)