谷歌表格中的ArrayFormula与Sumifs

17

通常不需要在工作表上寻求帮助,但我认为我的大脑已经因过度思考而坍塌。

试图填充整个列的数组公式,根据来自另一列的条件,对两个其他列进行总和计算。如果这听起来很奇怪,请查看此示例表格

screenshot

发票有编号。客户付款有“Into”银行账户,还与之相关联的发票编号,因此我知道哪个付款对应于哪个发票。有时会分批进行付款。我想为每张发票以及单独的帐户总结所有付款。我知道如何使用sumifs来做到这一点。我想要实现的技巧是在第一个单元格中使用一个数组公式来完成此操作。感谢所有的帮助。

4个回答

26
我最终使用的解决方案是这样的:
来自Google论坛的2n9的贡献。这里是link
=arrayformula(sumif(B3:B8&C3:C8,F3:F8&"A",A3:A8))
还有一些其他非常好的答案,使用了Jean-Pierre Verhulst的查询:
=query(A2:C8,"select B,sum(A) group by B pivot C")
=query(query(A2:C8,"select B,sum(A) group by B pivot C"),"select Col2,Col3")
=ArrayFormula(query(query(A2:C8,"select B,sum(A) group by B pivot C"),"select Col2,Col3 offset 1",0)+0)
这些解决方案中的每一个都以不同的方式解决了问题。它们具有不同的属性,例如删除标题或仅选择某一列。有关更多信息,请使用链接访问Google论坛。
希望这能帮到某个人。

查询很棒! - Aaron McMillin

1

现在,您的SUMIFS公式可以在MAP函数中正常工作,如下所示:

MAP函数在公司发票中的循环中起作用,为每个发票执行一个自定义函数LAMBDA。您的SUMIFS公式是这个自定义函数的主体,需要进行一些小的更改才能正常工作:与发票筛选器相关的条件F8需要替换为来自lambda的发票输入参数,我将其命名为invoice

最后但同样重要的是,MAP函数本身适用于整个发票列,甚至包括空单元格。为了避免这种行为,将列引用包装在ARRAY_CONSTRAIN函数中,并设置要评估的所需行数和列数。在这种情况下,它是单列,可以使用COUNTA函数计算出行数,该函数应用于整个发票列。

图像中显示的公式完成了上述所有操作。


2
看到这个问题得到解答,让我回想起了我的旧生活!我从未听说过 MAP,我会出于好奇去了解一下,谢谢。 - Catu

0

我已经添加了一列来合并两个表中需要匹配的条件。

我使用了一个arrayformula来扩展组合条件,然后在另一个arrayformula内部使用了sumif来执行实际上是在arrayformula内部进行的sumifs操作。

表1(油漆估算)

=ARRAYFORMULA(IFERROR(IF(E2:E<>"",E2:E&"First Coat",0),"E"))
=ARRAYFORMULA(IFERROR(SUMIF(Progress!B2:B,T2:T,Progress!G2:G),0))

表2(进度)

=ARRAYFORMULA(A2:A&E2:E)

-3

可以使用SUMIFS返回一个数组,例如在L3中

=SUMIFS(A3:A8,B3:B8,F3:F8,C3:C8,"A")

请注意,通常期望单个条件的地方,我使用了F3:F8,因此公式返回所需的6个值的数组

未经测试,因为我目前正在使用iPad,它似乎不喜欢Google文档....


谢谢,但那是我的当前解决方案,所以你是正确的(尽管忘记了$符号)。这个公式必须被拖动到所有单元格中应用。当每天处理新行时,这是不可持续的。当前公式:=SUMIFS($A$3:$A$8,$B$3:$B$8,$F$3:$F$8,$C$3:$C$8,"A") - Catu
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - barry houdini
我正在使用Google表格。我也在Google产品论坛上发布了帖子,一些有用的答案被提出。我将回答自己的问题。听起来这是Excel的一个不错的选择,但我已经抛弃了Excel多年,协作和云存储太重要了。 - Catu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接