首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用单元格中指定的名称从多个工作表中求和值

用单元格中指定的名称从多个工作表中求和值
EN

Web Applications用户
提问于 2017-06-02 21:04:01
回答 3查看 2K关注 0票数 3

我试图对包含在几张表格中的未知数量的数据进行汇总。床单的数量也不知道。到目前为止,我只是在一个列上使用了间接命令,该列中的表名列表不断增加,并且可以单独引用它们:

代码语言:javascript
运行
复制
        A
1   Sheet Name 1
2   Sheet Name 2
3   Sheet Name 3
4   Sheet Name 4

这些工作表的格式相同,但包含不同的数据。因此,人们可能会认为:

代码语言:javascript
运行
复制
      A          B
1   Apples       7
2   Oranges      8
3   Bananas      3
4   Grapes       5
5   Plums        1
6   Strawberries 8
7   Bananas      3
8   Grapes       5

我需要做的是迭代我的工作表名称列表,对该数据运行一个countif,然后将来自各个工作表的所有结果加在一起。

我试过用:

代码语言:javascript
运行
复制
=sum(arrayformula(countif(indirect(A:A&"!A:B"),"Bananas")))

但是,它只返回命名的第一个工作表的结果。因此,在这种情况下,我只会得到一个2返回,而页2-4可能每个包含10+香蕉。

EN

回答 3

Web Applications用户

发布于 2017-06-04 01:55:01

电子表格公式不能引用未确定的工作表数。“在所有工作表中计算此值在此范围内出现的次数”的逻辑可以在自定义函数中表示,如

代码语言:javascript
运行
复制
=countinsheets("A:B", "Bananas", 1)

其中的函数是

代码语言:javascript
运行
复制
function countinsheets(range, value) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheets = ss.getSheets();
  var result = 0;
  for (var i = 0; i < sheets.length; i++) {
    var data = sheets[i].getRange(range).getValues();
    for (var j = 0; j < data.length; j++) {
      for (var k = 0; k < data[0].length; k++) {
        if (data[j][k] == value) {
          result++;
        }
      }
    }
  }
  return result;
}

这将查找所有表格中A:B列中的所有“香蕉”,并返回它们的编号。请注意,范围"A:B“作为字符串传递,这在本例中是必要的,但有一个主要缺点。

缺点是:当电子表格数据被更改时,函数值不会自动更新.必须通过更改函数的第三个参数来强制刷新,这是一个假参数,正是因为这个原因而引入的。将1更改为其他东西,以使函数重新计算;它不会单独这样做。

票数 0
EN

Web Applications用户

发布于 2018-08-28 16:29:57

您可以做一些手动行堆叠,例如:

代码语言:javascript
运行
复制
=SUM(COUNTIF(INDIRECT(A1&"!A:A"),"bananas"),
     COUNTIF(INDIRECT(A2&"!A:A"),"bananas"),
     COUNTIF(INDIRECT(A3&"!A:A"),"bananas"))

但是,更方便用户使用的方法是增加一个列,它将根据列中工作表名称的存在为SUM生成子字符串:https://dcs.ggl.com/spreadsheets/d/

其中单元格B2:=IF(A3<>"",COUNTIF(INDIRECT(A3&"!A:A"),INDIRECT("D1")),)

单元格D2是:=SUM(B3:B)

票数 0
EN

Web Applications用户

发布于 2021-08-20 16:09:25

QUERY()函数在这里可能会有所帮助。它允许您在一个或多个工作表之上使用简单的SQL查询。下面是一个基于OP问题的示例:

代码语言:javascript
运行
复制
=QUERY({Sheet1!A:B;Sheet2!A:B;Sheet3!A:B},"SELECT SUM(Col2) WHERE Col1='Bananas' label sum(Col2) ''")

我提供了一个查询,通过将输出label of Col2设置为空,从而去掉输出头。如果您需要保留标题标签,您只需将其设置为任何您想要的。

票数 0
EN
页面原文内容由Web Applications提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://webapps.stackexchange.com/questions/106639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档