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

时间:2013-10-17 07:46:45

标签: excel

在excel中是否有一种方法可以将函数应用于其他函数的输入范围,因此对于例如,如果我有一个带有值的列B和带有字符串的列A,我想要对B中所有前三个字符的值求和在A是abc。我是否可以在不创建另一个包含A的前三个字符的列的情况下执行此操作     SUMIFS(B:B,左(A:A,3), “ABC”)

我希望在不在VBA中创建自己的函数的情况下执行此操作

1 个答案:

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

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