如果您在“riepilogo”(摘要)表的标题中将月份表示为日期,则可以在公式中引用它们。通过以年份编号开始行,您可以轻松地调整日期以适应年份的变化。
例如,这里的 A2 是年份,用一个简单的数字表示。B2,对于 Gennaio(一月),使用Date(year,month,day)
电子表格函数构建日期,在本例中为 2013/1/1。接下来的几个月使用EDATE(date,number_of_months)
电子表格功能设置每个后续月份的第一天。
现在,调整您的公式以引用该月的日期。操作员希望日期格式为“ date
yyyy-mm-dd”,因此您需要使用该TEXT
函数对其进行格式化。B3 中的公式如下所示:
=INDEX(query('Scheda Intervento'!$C$2:$K$13;ʺselect sum (K) where (F >= date'ʺ & text(B$2,ʺyyyy-mm-ddʺ) & ʺ' and F < date 'ʺ & text(edate(B$2,1),ʺyyyy-mm-ddʺ) & ʺ' and C = 'ʺ & $A3 &ʺ')ʺ);2;1)
请注意,EDATE()
再次使用 - 这是为了使公式仅依赖于同一列中的值。不是必需的,但很有帮助,因为它可以在电子表格的最右边一列中使用而无需修改。
除了将年份放入 A2 之外,您还可以选择:
- 使用自动确定年份
=year(today())
,或
- 引用电子表格中的另一个单元格。
编辑:Google 电子表格日期的本地化问题
上述解决方案有效 - 但不适用于意大利,也可能不适用于其他地区。对于Locale == Italia 的用户,Date()
和EDate()
函数都会在 Google 电子表格中导致“解析错误”。
为了解决这个问题,下面的自定义函数将给定的日期值转换为适合in 中date
运算符格式的字符串QUERY
。有关自定义函数的更多信息,请参阅此博客条目。您需要做的就是从“工具”菜单中选择“脚本编辑器...”,将此代码块粘贴到编辑器工作区,然后保存。您可以为脚本命名任何您喜欢的名称。
/**
* Return the given date as a string formatted as 'yyyy-mm-dd'.
*/
function date2string(dateval) {
var d = new Date(dateval);
var dateArr = [];
dateArr[0]=d.getFullYear();
dateArr[1]=d.getMonth() + 1; //Months are zero based
dateArr[2]=d.getDate();
return dateArr.join('-');
}
有了脚本,您就有了一个date2string()
可以在电子表格中使用的新函数。单元格 C3 的更新公式为:
=INDEX(query('Scheda Intervento'!$C$2:$K$13;"select sum (K) where (F >= date '" & date2string(C$2) & "' and F < date '" & date2string(D$2) & "' and C = '" & $A3 &"')");2;1)
INDEX() 的问题
这个公式还有另一个问题,就是INDEX()
函数。该函数需要一个数组作为输入,以及对数组中的项目进行索引的索引。当QUERY()
在查询字符串中找到符合条件的数据时,这很有效。在这种情况下,返回 fromQUERY('Scheda Intervento'!$C$2:$K$13;"select...
类似于这个 2 行数组:
Sum
54
在这种情况下,INDEX([["Sum"],[54]];2;1)
结果为54
,从数组的第 2 行第 1 行中选取。
但是如果我们没有匹配的数据,就没有第 2 行,我们就会#REF
出错。我们可以通过简单地使用SUM()
添加数组的数值来避免这种情况。当没有数字时,这将导致0
- 完美。
这是单元格 C3 的结果公式:
=SUM(query('Scheda Intervento'!$C$2:$K$13;"select sum (K) where (F >= date '" & date2string(C$2) & "' and F < date '" & date2string(D$2) & "' and C = '" & $A3 &"')"))