2016-03-10 36 views
0

所以我基本上想要找到符合一定條件的最後一個值的索引(位置)。Excel公式查找列中的最後一次出現值(帶條件)

下面是我用找到的第一個匹配的結構式的例子:,我發現在E5的第一個「CALLINBOUND」值

={MATCH(1,(Sheet!$B5:$B50000=$B$3)*(Sheet!$D5:$D50000>$E$3)*(C$8=Sheet!$A5:$A50000)*(Sheet!$E5:$E50000="CALLINBOUND"),0)} 

這工作正常:檢查一些其他條件後E50000(基本上B5:B50000是ID,D5:D50000是小時,A5:A50000是日期)。

現在,讓我們說,我想在同一E5找到最後「CALLINBOUND」值:E50000範圍內使用相同的條件:

Sheet!$B5:$B50000=$B$3 
Sheet!$D5:$D50000>$E$3 
C$8=Sheet!$A5:$A50000 
Sheet!$E5:$E50000="CALLINBOUND" 

我應該如何進行?

我發現了一些使用MAX()和SUMPRODUCT()或LOOKUP()的答案,但它只返回範圍內的最後一個匹配而沒有檢查任何條件,所以我有點卡住了。此外,如果有什麼方法來優化上述公式的性能,那將是值得讚賞的。該範圍最終會增長,並且數組公式最終會變慢。

我可能會在將來使用Access,我猜這對SQL來說比使用純Excel公式更容易。

謝謝!

回答

1

如果你有2007或更早版本比使用數組公式:

=Max(IF((Sheet!$B5:$B50000=$B$3)*(Sheet!$D5:$D50000>$E$3)*(C$8=Sheet!$A5:$A50000)*(Sheet!$E5:$E50000="CALLINBOUND"),Row($5:$50000))) 

作爲Array的使用退出編輯模式時,按Ctrl-Shift鍵,Enter鍵。

如果你有2010或更高版本可以使用:

=Aggregate(14,6,Row($5:$50000)/((Sheet!$B5:$B50000=$B$3)*(Sheet!$D5:$D50000>$E$3)*(C$8=Sheet!$A5:$A50000)*(Sheet!$E5:$E50000="CALLINBOUND")),1) 

如果您有最新的Office 365或正在使用的網絡版,則:

=MAXIFS(Row($5:$50000),Sheet!$B5:$B50000,$B$3,Sheet!$D5:$D50000,">" & $E$3,Sheet!$A5:$A50000,C$8,Sheet!$E5:$E50000,"CALLINBOUND") 

如果你想替換當前公式找到第一個然後在第一個變化MAX到MIN。在第二次更改14到15.在第三次更改MAXIFS到MI​​NIFS

+0

我有Office 2010,我會試試這個,謝謝。 @斯科特Craner – dnLL

+0

我設法得到第二個公式工作,謝謝。 – dnLL

+0

@dnLL,我很高興,請將其標記爲正確 –

相關問題