Arrayformula-将动态生成的范围列表加在一起

时间:2019-01-30 11:59:00

标签: google-sheets

我正在寻找一种使用ARRAYFORMULA将动态生成的范围列表加在一起的方法。

如果存在已知的范围列表,则攻击此问题的常规方法很好,我想要的结果示例将使用以下方法工作:

=ARRAYFORMULA( A1:A10 + B1:B10 ) 

在我想要将多个表中的范围加在一起的情况下。我不希望用户每次添加要计算的新工作表时都必须手动调整数组公式,我也希望能够添加一些逻辑以从计算中包括或删除特定工作表,但是对于现在我很乐意忽略它,而只专注于将单元格加在一起。

我的处理方法是创建一列带有名称列表的列,每个名称都与文档中的一个工作表匹配,然后使用该列表以动态方式使用INDIRECT构建要添加在一起的范围列表。

.------------.
| sheet1     |     <---- SheetListNamedRange
|------------|
| sheet2     |
`------------'

这是一个简单的例子

=ARRAYFORMULA( INDIRECT("'" & SheetListNamedRange & "'!D4:75") )

根据失败的方式,有很多失败模式,但是这个特定的公式只会放入第一张纸的值,而忽略其他任何值,我想这是有道理的。

在普通的编码语言中,我所追求的相当于循环中的i++。有什么办法可以使这项工作吗?

2 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,则希望获得一个基于不同工作表中不同范围生成的列表。如果您的案例很简单,就像您在帖子开头提到的那样,那么下面的案例就可以了。

={Sheet1!A1:A2; Sheet2!B1:B2}

如果需要所有这些值的总和,则可以使用SUM

=SUM({Sheet1!A1:A2; Sheet2!B1:B2})

如果这不是您想要的,请告诉我,以便我相应地更改答案。

答案 1 :(得分:0)

您不能在 INDIRECT 中引用数组数组。您将需要 INDIRECT 每个包含数组的工作表。

=SUMPRODUCT(ARRAYFORMULA(INDIRECT(A1&"!"&"D:D")+
                         INDIRECT(A2&"!"&"D:D")+
                         INDIRECT(A3&"!"&"D:D")+
                         INDIRECT(A4&"!"&"D:D")))

note1 :在这种情况下,结果是25,即10 + 15的总和。

  • 10 sheet1!D:D
  • 的总和
  • 15 sheet2!D:D
  • 的总和

note2 :在 INDIRECT

中没有工作表3和工作表4等于0。

note3:拥有工作表列表的工作表的 D:D 必须为空