=ArrayFormula 使用 SumIf 函数在 Google 表格中的两个日期之间求和
Posted
技术标签:
【中文标题】=ArrayFormula 使用 SumIf 函数在 Google 表格中的两个日期之间求和【英文标题】:=ArrayFormula Using SumIf Function to Sum Between Two Dates in Google Sheets 【发布时间】:2022-01-17 12:39:54 【问题描述】:我正在尝试创建一个函数,在使用 =arrayformula
函数迭代列结果时,将两个日期之间行驶的所有里程相加
下面是我的函数的语法:
'TempDataSet'!G2:G: 总和范围 具有总行驶里程
'TempDataSet'!C2:C:条件列,包含所有驱动日期
A7:开始日期
B7:结束日期
这是我在下面写的函数使用 sumifs 函数
=SUMIFS('TempDataSet'!$G$2:$G,'TempDataSet'!$C$2:$C,">="&A7,'TempDataSet'!$C$2:$C,"<="&B7)
此函数有效,但我想实现=arrayformula
函数,以便该函数可以自动向下拖动结果。
我知道**你不能在 =arrayformula
中使用 =sumifs
,所以这就是我卡住的地方
在=arrayformula
中使用=sumif
函数的方法是什么?
我也尝试过使用 =query
函数,但 =query 函数不支持 =arrayformula
【问题讨论】:
请给出一个最小的、可重现的例子***.com/help/minimal-reproducible-example 【参考方案1】:使用 MMULT(如果数据在第 2 行和第 10 行之间)
=mmult(transpose(arrayformula(
IF((TempDataSet!$C$2:$C$10>=TRANSPOSE(A7:A))*(TempDataSet!$C$2:$C$10<=TRANSPOSE(B7:B)),
TempDataSet!$G$2:$G$10,0))),
sequence(rows(TempDataSet!$G$2:$G$10),1,1,0))
如果你限制了TempDataSet中的行数以避免长时间计算,你也可以使用
=mmult(transpose(arrayformula(
IF((TempDataSet!$C$2:$C>=TRANSPOSE(A7:A))*(TempDataSet!$C$2:$C<=TRANSPOSE(B7:B)),
value(TempDataSet!$G$2:$G),0))),
sequence(rows(TempDataSet!$G$2:$G),1,1,0))
说明
创建第一个条件矩阵
=arrayformula(IF((TempDataSet!$A$2:$A$10>=TRANSPOSE(A2:A7))*(TempDataSet!$A$2:$A$10<=TRANSPOSE(B2:B7)),TempDataSet!$B$2:$B$10,0))
创建一个1的序列:sequence(列数为1,行数等于我转置的矩阵的列数)
=sequence(rows(TempDataSet!$B$2:$B10),1,1,0)
最后申请 MMULT:MMULT
【讨论】:
这解决了问题!这是如何运作的?我以前从未使用过 MMULT、VALUE 或 SEQUENCE?我正在尝试了解 Google 表格中的数组。 我添加了一些解释,但我想你会在网上找到练习以更好地了解 mmult 的工作原理!【参考方案2】:尝试:
=SUMPRODUCT(FILTER('TempDataSet'!G2:G; 'TempDataSet'!C2:C>A7; 'TempDataSet'!C2:C<=B7))
【讨论】:
以上是关于=ArrayFormula 使用 SumIf 函数在 Google 表格中的两个日期之间求和的主要内容,如果未能解决你的问题,请参考以下文章