SUM、FILTER、QUERY 和 IMPORTRANGE 并与数据匹配

SUM, FILTER, QUERY and IMPORTRANGE and match to data

在一个单独的电子表格中,我在第 2 列 (B2:B) 中有项目名称。在同一电子表格的第 10 列 (J2:J) 中,我在该项目上花费了时间(持续时间)。这些项目是重复的,并且在它们上面花费了额外的时间,所以它们在列表中出现了多次。像这样:

Project Name    Time Spent
12-001 John     2:13:45
12-002 Sally    0:34:45
12-003 Tim      1:56:12
13-006 Bruce    3:34:12
12-001 John     3:45:09
12-003 Tim      0:38:56
12-001 John     1:00:00

在公式所在的父电子表格中,我在第 2 列 (B2:B) 中有一个所有项目的主列表。我想对另一个电子表格中的数据进行求和和过滤,并将其与正确的项目名称相匹配。所以像这样:

Project Name    Time Spent
12-001 John     6:58:54
12-002 Sally    0:34:45
12-003 Tim      2:35:08
13-006 Bruce    3:34:12

我一直在努力:

=sum(filter(importrange("key","Timesheet!A2:J254"),importrange("key","Timesheet!B2")=B2,))

=sum(query(importrange("key","Timesheet!A2:J254"),"Select Col10 where Col2 ="&B2&")

这不起作用。

我确实有一个解决方法,就是对同一个公式中的三个 IMPORTRANGE 函数进行求和和过滤,但这意味着我必须 运行 IMPORTRANGE 数千次?效率不高:

=iferror(sum(filter(IMPORTRANGE("key","Timesheet!J2:J"),IMPORTRANGE("key","Timesheet!B2:B")=B2)),"")

可能不适合 OP,但传统的解决方案可能是一个支点 table:

Project Name for Rows,总结方式:SUM Time Spent for Values.

=ArrayFormula(IFERROR(VLOOKUP(B2:B,QUERY(QUERY(ImportRange("key","Timesheet!A2:J254"),"select Col2, hour(Col10)/24+minute(Col10)/1440+second(Col10)/86400"),"select Col1, sum(Col2) group by Col1"),2,0)))


  1. QUERY 是使用 ImportRange 时的理想选择,因为它允许一次 ImportRange 调用 manipulation/aggregation 大量数据。

  2. QUERY 无法在本地聚合时间值,因此需要使用 hour(Col10)/24+minute(Col10)/1440+second(Col10)/86400 复杂地转换为数值。如果持续时间超过一天,则还需要包括天 (Col10)。

  3. 嵌套的 QUERY 函数然后提供查找 table,VLOOKUP 使用它来执行项目名称主列表的 "array lookup"。同样,这允许使用一个 ImportRange 调用,而不必填写公式。