Excel公式,用于查找列中最后一次出现的值(带条件)

时间:2016-03-10 16:21:23

标签: excel excel-formula excel-2010

所以我基本上想找到满足一定条件的最后一个值的索引(位置)。

以下是我用于查找FIRST匹配的公式示例:

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

这很好用,我在E5后找到了第一个“CALLINBOUND”值:E50000检查了一些其他条件(基本上B5:B50000是ID,D5:D50000是小时,A5:A50000是日期)。

现在,假设我想在相同的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()找到了几个答案,但它只返回范围内的最后一个匹配而没有检查任何条件,所以我有点卡住了。此外,如果有任何方法可以优化上述公式的性能,那将是值得赞赏的。这个范围最终会增长,而且数组公式也会变慢。

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

谢谢!

1 个答案:

答案 0 :(得分: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)))

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