所以我基本上想找到满足一定条件的最后一个值的索引(位置)。
以下是我用于查找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公式更容易。
谢谢!
答案 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到MINIFS