在excel中是否有一种方法可以将函数应用于其他函数的输入范围,因此对于例如,如果我有一个带有值的列B和带有字符串的列A,我想要对B中所有前三个字符的值求和在A是abc。我是否可以在不创建另一个包含A的前三个字符的列的情况下执行此操作 SUMIFS(B:B,左(A:A,3), “ABC”)
我希望在不在VBA中创建自己的函数的情况下执行此操作
答案 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引用可以是表中任何有保证的非空白列。)