Google电子表格中的arrayformula sum

时间:2014-02-15 12:36:26

标签: google-sheets

你如何arrayformula() sum()如:

=sum(A1:H1)

我需要减少1000行。

10 个答案:

答案 0 :(得分:18)

另一种选择:

=ArrayFormula(SUMIF(IF(COLUMN(A1:H1),ROW(A1:A1000)),ROW(A1:A1000),A1:H1000))

答案 1 :(得分:6)

这就是你要找的东西:

=MMULT(A1:H1000,TRANSPOSE(ARRAYFORMULA(COLUMN(A1:H1000)^0)))

请参阅我给出的Web应用程序的答案:https://webapps.stackexchange.com/a/53419/29140

注意:在新的Google电子表格上试用了它,没有成功。

答案 2 :(得分:3)

在两个有效的答案中,Jacob Jan Tuinstra和AdamL,Jacob给出了更好的答案。雅各布跑得更快,更容易记住。

但是,为什么在更容易使用Google表格时更容易使用疯狂的公式?

=ARRAYFORMULA(A2:A+B2:B+C2:C+D2:D+E2:E+F2:F+G2:G+H2:H) 

在上述公式中,您可以使用命名范围而不是引用范围。

=ARRAYFORMULA(range1+range2+range3+range4+range5+range6+range7+range8) 

同样,您可以对跨越工作表的行进行求和,而不是卡在同一工作表中的列中。

要修复公式以阻止为空行返回零,请使用:

=arrayFormula(if(isNumber(A2:A),A2:A+B2:B+C2:C+D2:D+E2:E+F2:F,G2:G,H2:H))

请参阅:See Ahab's answer on Google Forums

有关总和积累公式,请参阅Otávio Alves Ribeiro's answer on Google Forums

答案 3 :(得分:1)

如果您想重复下面所有行的总和,可以使用arrayformula(A:A+H:H)
如果你想要总结一切,那么你不需要数组公式,只需使用sum(A:A;H:H)

答案 4 :(得分:0)

如果我看一下这个公式,我真的认为以下可能更简单。将其添加到工具>脚本编辑器:

function row_sum(range_to_sum_per_row) {
  var result_column = [];
  for (var r = 0; r < range_to_sum_per_row.length; r++) {
    var row_sum = parseFloat(0);
    for (var c = 0; c < range_to_sum_per_row[r].length; c++) {
        row_sum += range_to_sum_per_row[r][c] || 0;
    }
    result_column.push([row_sum]);
  }
  return result_column;
}

出于性能原因使用它,其中C:H是你想要总结的范围,A:A是不包含空字符串的列:

=row_sum(filter(C2:H, len(A2:A)>0))

答案 5 :(得分:0)

如果您希望能够为A1:H中的所有值添加行并将其总和添加到最后一行,则可以使用:

 =ArrayFormula(SUMIF(IF(COLUMN(A1:H1),ROW(A1:A)),ROW(A1:A),A1:H))

或者,如果您希望能够将行和列添加到电子表格中,并求和到最后两者,则也可以这样做。将以下代码粘贴到任何单元格中,它将为粘贴的单元格下方和右侧的每一行中的所有单元格创建一列求和值:

=arrayformula(SUMIF(IF(COLUMN(indirect(concatenate(REGEXREPLACE(address(row(),column()+1),"[^[:alpha:]]", ""),VALUE(REGEXREPLACE(address(row(),column()),"[^[:digit:]]", "")),":",VALUE(REGEXREPLACE(address(row(),column()),"[^[:digit:]]", ""))))),ROW(indirect(concatenate(REGEXREPLACE(address(row(),column()+1),"[^[:alpha:]]", ""),VALUE(REGEXREPLACE(address(row(),column()),"[^[:digit:]]", "")),":",REGEXREPLACE(address(row(),column()+1),"[^[:alpha:]]", ""))))),ROW(indirect(concatenate(REGEXREPLACE(address(row(),column()+1),"[^[:alpha:]]", ""),VALUE(REGEXREPLACE(address(row(),column()),"[^[:digit:]]", "")),":",REGEXREPLACE(address(row(),column()+1),"[^[:alpha:]]", "")))),indirect(concatenate(concatenate(REGEXREPLACE(address(row(),column()+1),"[^[:alpha:]]", ""),VALUE(REGEXREPLACE(address(row(),column()),"[^[:digit:]]", "")),":"),address(rows($A:$A),columns($1:$1))))))

答案 6 :(得分:0)

使用DSUM

=ARRAYFORMULA(DSUM(
  TRANSPOSE(FILTER({A2:A,A2:H},A2:A<>"")),
  SEQUENCE(COUNTA(A2:A)),{IFERROR(1/0);IFERROR(1/0)}))

注释:

  • {IFERROR(1/0);IFERROR(1/0)}DSUM的条件设为零。

  • {A2:A ,A2:H}-为DSUM添加了伪列以模仿标头列。

  • 也许可以将公式转换为DMAXDAVERAGE

答案 7 :(得分:0)

使用查询

=INDEX(TRANSPOSE(
  QUERY(TRANSPOSE(FILTER(A2:H,A2:A<>"")),
  "select sum(Col"&JOIN("), sum(Col",SEQUENCE(COUNTA(A2:A)))&")",0)
),,2)

注释:

  • 动态生成查询字符串

答案 8 :(得分:-1)

让我们不要复杂化。 只需将括号放在范围内的每个数组中。

=arrayformula( Sum( (A1:A):(H1:H) )

这不仅包括最多1000行,还包括无限远。

如果你真的想限制,那就去吧

=arrayformula( Sum( (A1:A1000):(H1:H1000) )

答案 9 :(得分:-1)

将A-H水平求和并向下运行523行:

query : # a query to my model
tasks =  []        
for record in query:
    tasks.append(do_something_with_google_calendar(record))

loop = asyncio.SelectorEventLoop()
asyncio.set_event_loop(loop)

loop.run_until_complete(asyncio.wait(tasks))
loop.close()