我试图对包含在几张表格中的未知数量的数据进行汇总。床单的数量也不知道。到目前为止,我只是在一个列上使用了间接命令,该列中的表名列表不断增加,并且可以单独引用它们:
A
1 Sheet Name 1
2 Sheet Name 2
3 Sheet Name 3
4 Sheet Name 4
这些工作表的格式相同,但包含不同的数据。因此,人们可能会认为:
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
,然后将来自各个工作表的所有结果加在一起。
我试过用:
=sum(arrayformula(countif(indirect(A:A&"!A:B"),"Bananas")))
但是,它只返回命名的第一个工作表的结果。因此,在这种情况下,我只会得到一个2返回,而页2-4可能每个包含10+香蕉。
发布于 2017-06-04 01:55:01
电子表格公式不能引用未确定的工作表数。“在所有工作表中计算此值在此范围内出现的次数”的逻辑可以在自定义函数中表示,如
=countinsheets("A:B", "Bananas", 1)
其中的函数是
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更改为其他东西,以使函数重新计算;它不会单独这样做。
发布于 2018-08-28 16:29:57
您可以做一些手动行堆叠,例如:
=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)
发布于 2021-08-20 16:09:25
QUERY()
函数在这里可能会有所帮助。它允许您在一个或多个工作表之上使用简单的SQL查询。下面是一个基于OP问题的示例:
=QUERY({Sheet1!A:B;Sheet2!A:B;Sheet3!A:B},"SELECT SUM(Col2) WHERE Col1='Bananas' label sum(Col2) ''")
我提供了一个查询,通过将输出label
of Col2
设置为空,从而去掉输出头。如果您需要保留标题标签,您只需将其设置为任何您想要的。
https://webapps.stackexchange.com/questions/106639
复制相似问题