2016-04-28 61 views
0

我嘗試使用多個搜索條件查找記錄。我想將員工的角色和年份與最大年份之間的年數與下面的「標題」相匹配。如果可能,我想堅持使用函數。使用多個搜索條件查找記錄,包括範圍

Title   Role  Min Year Max Year 
Senior Sales Sales  6  99 
Middle Sales Sales  2  5 
Junior Sales Sales  0  1 
Sr. Counsel  Counsel  0  99 
Jr Counsel  Counsel  0  99 
Senior Staff Staff  6  99 
Middle Staff Staff  2  5 
Junior Staff Staff  0  1 
Other   Other  0  99 

例如,比爾的銷售額爲一年,並應具有標題初級銷售額。喬,工作了10年,應該是高級職員。

ID Last Name Title Seniority Expected Result 
1 Nye  Bill Sales 1   Junior Sales 
2 Smith Joe  Staff 10   Senior Staff 

此公式返回正確的結果,但只有當它的「前輩」級稱號,沒有其他人(#REF)。

=INDEX($A$2:$A$10,MATCH($D20,$B$2:$B$10,0),MATCH($E20,$D$2:$D$10,-1)) 

下面是返回角色的第一個實例的公式:

=INDEX(A2:A10,AND(MATCH(D20,B2:B10,0),SUMPRODUCT(--(E20<=D2:D10),--(E20>=C2:C10)))) 

它返回的「高級銷售」,而不是「初級銷售」。

謝謝。

回答

1

這裏是一個非CSE數組公式:

=INDEX($A$2:$A$10,MAX(INDEX(($B$2:$B$10=J2)*($C$2:$C$10<=K2)*($D$2:$D$10>=K2)*(ROW($A$2:$A$10)-ROW($A$2)+1),))) 

enter image description here

+2

有一點需要注意的是,如果沒有數據匹配,max函數仍會返回0.如果行號= 0,索引可以做奇怪的事情。顯然,它會返回與輸入公式相同行中的值,或者如果公式在索引行範圍之外的行中返回0。 – gtwebb

+0

@ gtwebb你是對的。如果沒有匹配,它會每次返回第一行。 –

+0

我在玩它,它並不總是返回第一行。如上所述,它似乎取決於輸入公式的哪一行。 – gtwebb

0

只要你保持你的查找表,安排這樣的,這個代碼的工作對我來說:

=INDEX($A$2:$A$10,MATCH($D20,$B$2:$B$10,0) + MATCH($E20,$D$2:$D$10,-1) - 1) 
+0

這適用於所有,但'Other'它返回''#REF這 –

1

使用數組公式(與CTRL + SHIFT輸入+輸入),你可以使用這個

=INDEX($A$2:$A$10,MATCH(1,(E20>$C$2:$C$10)*(E20<=$D$2:$D$10)*($B$2:$B$10=D20),0)) 

comparision語句返回一個0(false)和1s(true)的數組。當所有三個都爲真時,它們一起乘以返回匹配函數中匹配的1。

+0

工作,但與非CSE公式去。 – jabs