excel,将函数应用于目标范围

有没有办法在Excel中应用函数来input其他函数的范围,所以对于检验,如果我有一个列B的值和列A的string,我想总结所有的值B在A的前三个字符是ABC。 我可以做到这一点,而不创build另外一列的前三个字符像sumifs(B:B,左(A:A,3),“abc”)

我正在寻找这样做,而无需在VBA中创build自己的function

对于这种情况,您可以使用通配符匹配:

=SUMIFS(B:B,A:A,"abc*") 

要回答你的更一般的问题,如果你绝对需要select基于公式的行,但绝对不能添加任何列,你可以使用数组函数,但在这种情况下可能会有问题。 这将是一个糟糕的实施:

 REALLY SLOW: {=SUM(B:B*(LEFT(A:A,3)="abc"))} entered without the brackets, pressing ctrl+shift+enter for an array formula or: =SUMPRODUCT(B:B*(LEFT(A:A,3)="abc")) abusing sumproduct to get an array formula 

因为A:A和B:B会被转换成非常大的数组,而不是范围,所以将会有非常差的performance,并且将公式向下拖动甚至几十行将会是令人难以忍受的。

这将有更好的performance:

 {=SUM(B$1:B$100*(LEFT(A$1:A$100,3)="abc"))} or: =SUMPRODUCT(B$1:B$100*(LEFT(A$1:A$100,3)="abc")) 

用你的行数replace100个合理的上限。 如果您确实需要将行数计为dynamic,则有办法解决此问题。 例如,您可以将数据格式化为表格并使用结构化引用。 你也可以使用这样的东西:

 {=SUM(OFFSET($B$1,0,0,COUNTA($A:$A),1)*(LEFT(OFFSET($A$1,0,0,COUNTA($A:$A),1),3)="abc"))} or: =SUMPRODUCT(OFFSET($B$1,0,0,COUNTA($A:$A),1)*(LEFT(OFFSET($A$1,0,0,COUNTA($A:$A),1),3)="abc")) 

这是丑陋的,但function。 (给予counta的$ A:$引用可以是表中的任何保证非空列。)