0

excel中有没有一种方法可以将函数应用于其他函数的输入范围,例如,如果我有一个带有值的B列和带有字符串的A列,并且我想对B中的所有值求和,其中A中的前三个字符是美国广播公司。我可以在不使用 A 的前三个字符创建另一列的情况下执行此操作吗? sumifs(B:B,left(A:A,3),"abc")

我希望在不在 VBA 中创建自己的函数的情况下做到这一点

4

1 回答 1

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 引用可以是表中的任何保证非空白列。)

于 2013-10-17T07:55:56.473 回答