0

我必须做一个每年自动递增日期的查询。例如,我使用这个公式:

=INDEX(query('Scheda Intervento'!C3:K14;"select sum (K) where (F >= date '2013-01-01' and F <= date '2013-01-31' and C = '" & A3 &"')");2;1)

...但是每年我都必须更改公式中出现的任何地方的日期(2014 年、2015 年)等。

我的电子表格副本在此处共享。该公式位于单元格 C2 中的工作表“riepilogo totale ore , date, compensi operatore”中。

如何让我的公式在未来几年自动更新?

4

1 回答 1

0

如果您在“riepilogo”(摘要)表的标题中将月份表示为日期,则可以在公式中引用它们。通过以年份编号开始行,您可以轻松地调整日期以适应年份的变化。

例如,这里的 A2 是年份,用一个简单的数字表示。B2,对于 Gennaio(一月),使用Date(year,month,day)电子表格函数构建日期,在本例中为 2013/1/1。接下来的几个月使用EDATE(date,number_of_months)电子表格功能设置每个后续月份的第一天。

日期计算

现在,调整您的公式以引用该月的日期。操作员希望日期格式为“ dateyyyy-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 &"')"))
于 2013-04-23T17:43:04.517 回答