Excel公式来查找列中最后一个值的出现(有条件)

所以我基本上想find符合一定条件的最后一个值的索引(位置)。

下面是我用来find第一个匹配的公式的一个例子:

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

这工作正常,我发现在E5:E50000检查一些其他条件(基本上B5:B50000是ID,D5:D50000是小时和A5:A50000是date)的E5:E50000中的第一个“CALLINBOUND”值。

现在,假设我想在相同的条件下find相同E5:E50000范围内的最后一个“CALLINBOUND”值:

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

我应该如何继续?

我使用MAX()和SUMPRODUCT()或LOOKUP()find了一些答案,但是它只返回范围内的最后一个匹配而没有检查任何条件,所以我有点卡住了。 此外,如果有任何方法来优化上述公式的性能,那将不胜感激。 范围最终会增长,数组公式最终会变慢。

我将来可能会使用Access,我想用SQL比使用纯Excel的公式更容易。

谢谢!

如果您有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))) 

作为一个数组,退出编辑模式时使用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") 

如果您想要replace您的当前公式find第一个然后在第一次更改MAX到MIN。 在第二次改变14到15.在第三次改变MAXIFS到MI​​NIFS