求和,过滤,查询和重新排列和匹配电子表格中的数据

时间:2015-03-10 17:14:28

标签: google-sheets

在单独的电子表格中,我在第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)),"")

2 个答案:

答案 0 :(得分:1)

=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调用进行大量数据操作/聚合。

  2. QUERY无法原生地汇总时间值,因此使用hour(Col10)/24+minute(Col10)/1440+second(Col10)/86400进行了复杂的数值转换。如果您的持续时间超过一天,则还需要包括日期(Col10)。

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

答案 1 :(得分:0)

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

SO28970025 example

Project Name ,汇总方式:SUM Time Spent