2013-10-17 64 views
0

有没有在Excel方式应用功能的其他功能输入范围,所以对于exampel,如果我有一个值,并用串列A列B和我要总结的所有值在B中,A中的前三个字符是abc。我能做到这一点,而不创建与A的前三个字符的另一列像 sumifs(B:B,左(A:A,3),“abc”)Excel中,应用功能,目标范围

我期待这样做,而不创建在VBA

回答

2

我自己的函数对于这种情况,你可以使用通配符匹配:

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

要回答你的更普遍的问题,如果你绝对需要根据一个公式来选择行,但你绝对可以”不要再增加任何列,你可以使用数组功能,但可以在这样的情况下,有问题的。这将是一个坏的实现:

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和B:B将被转换成非常大的阵列,而不是范围,并拖动公式向下甚至几十行会很痛苦。

这将有更好的表现:

{=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")) 

与您的行数一些合理的上限取代100。如果你真的需要行数是动态的,有办法解决它。你可以,例如,格式化数据表和使用结构化引用。你也可以用这样的东西:

{=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")) 

这是丑陋的,但功能。 (该$ A:$给COUNTA的引用可以在你的表中的任何保证,非空列。)

+0

非常感谢。这是一个很好的概述 – chrise