【发布时间】:2015-09-19 21:42:38
【问题描述】:
现在我在 Google 电子表格中计算多个日期的总数,为了计算一周的时间,我取开始日期,然后为那一天做一个 Filter() + 整个一周的 1。
一个例子:
=SUM(IFERROR(FILTER('HelpScout Import'!C:C, 'HelpScout Import'!$B:$B = $A3, 'HelpScout Import'!$A:$A = $B$1),0), IFERROR(FILTER('HelpScout Import'!C:C, 'HelpScout Import'!$B:$B = $A3, 'HelpScout Import'!$A:$A = TO_DATE(N($B$1)+1)), 0), IFERROR(FILTER('HelpScout Import'!C:C, 'HelpScout Import'!$B:$B = $A3, 'HelpScout Import'!$A:$A = TO_DATE(N($B$1)+2)), 0), IFERROR(FILTER('HelpScout Import'!C:C, 'HelpScout Import'!$B:$B = $A3, 'HelpScout Import'!$A:$A = TO_DATE(N($B$1)+3)), 0), IFERROR(FILTER('HelpScout Import'!C:C, 'HelpScout Import'!$B:$B = $A3, 'HelpScout Import'!$A:$A = TO_DATE(N($B$1)+4)), 0), IFERROR(FILTER('HelpScout Import'!C:C, 'HelpScout Import'!$B:$B = $A3, 'HelpScout Import'!$A:$A = TO_DATE(N($B$1)+5)), 0), IFERROR(FILTER('HelpScout Import'!C:C, 'HelpScout Import'!$B:$B = $A3, 'HelpScout Import'!$A:$A = TO_DATE(N($B$1)+6)), 0))
这由多个部分组成,如下所示:
IFERROR(FILTER('HelpScout Import'!C:C, 'HelpScout Import'!$B:$B = $A3, 'HelpScout Import'!$A:$A = TO_DATE(N($B$1)+1)), 0)
这只是按开始日期 + 1 过滤数据。HelpScout Import'!$A:$A 是日期列。 TO_DATE(N($B$1)+1)) 获取日期,将其转换为数字,加 1,然后将其转换回日期。
如果我想编译一整个月的数据,这种类型的函数将是非常不合适的。像上面那样有 30 到 31 个部分是难以管理的。
有没有更好的方法来做到这一点?
编辑:使用DSUM() 的更简单方法:
=DSUM('HelpScout Import'!A:H, "Total Conversations", ARRAYFORMULA(TRANSPOSE({"Date", H8, TO_DATE(N(H8)+1), TO_DATE(N(H8)+2), TO_DATE(N(H8)+3), TO_DATE(N(H8)+4), TO_DATE(N(H8)+5), TO_DATE(N(H8)+6)})))
但是,这仍然意味着我每天都需要TO_DATE(N(H8)+1)。寻找一种在单个单元格函数中创建日期数组的方法。
Edit2:制作了一个返回日期数组的应用程序脚本。
function GetNextXDays(startDay, days)
{
var inputDate = new Date(startDay);
var dates = [];
for(i =0; i < days; i++)
{
var newDate = new Date(startDay);
newDate.setDate(newDate.getDate() + i);
dates.push(newDate);
}
return dates;
}
这会返回到目前为止我需要的日期。
【问题讨论】:
标签: google-sheets spreadsheet google-docs