改进 Count、CountIF Google Sheets 公式
Improving Count, CountIF Google Sheets formulas
我创建了一个 google sheet。单个 google sheet 内有多个 sheets(制表符)。
我有一个 sheet 叫 Dashboard
还有其他 sheet,例如 kkweb
、virtual
。目前除仪表板外还有 2 个 sheet。所有 2 sheet 都具有相同的列和结构,即使是新的 sheet 也将具有相同的列和结构。
我想对 dashboard
sheet.
进行一些计算
- 统计任务总数
=COUNT(kkweb!B5:B,virtual!B5:B)
- 总计数 "New Requests"
=(COUNTIF(kkweb!D5:D,"New Requests")) + (COUNTIF(virtual!D5:D,"New Requests"))
注意:我上面的公式运行得很好,但我将有 20+ sheet 而不是 2。所以我的计数公式将像
=COUNT(kkweb!B5:B,virtual!B5:B,Sheet3!B5:B,Sheet4!B5:B,Sheet5!B5:B,Sheet6!B5:B,Sheet7!B5:B)
等
我所有的公式都会很长,每次都有新的sheet。
有什么简单的方法可以在googlesheet秒内进行计算吗?
我们也许可以使用名称配置创建额外的 sheet 并在其中添加 sheet 名称并执行一个简单的公式来完成上述计算
Note: Each sheet will have a different name, not sheet1, sheet2,
sheet3.
其次,我如何根据所有 sheet 中的其他列计算值。
例如:=(COUNTIF(kkweb!D5:D,"New Requests"))
这个公式计算的是 kkweb sheet 中 D5:D 的值为 New Requests
的地方。我还有另一列 C5:C,其中包含名称 "John"、"Katrina" 等
所以基本上我想检查 New Requests
有多少是 "John"
有几种方法可以解决这个问题。这取决于你想走多远,例如。你喜欢哪条路线。在内部没有检测 sheet 名称的公式,因此您需要一个脚本。有几个例如:
function SNAME(option) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet()
var thisSheet = sheet.getName();
if(option === 0){ // ACTIVE SHEET NAME =SNAME(0)
return thisSheet;
}else if(option === 1){ // ALL SHEET NAMES =SNAME(1)
var sheetList = [];
ss.getSheets().forEach(function(val){
sheetList.push(val.getName())
});
return sheetList;
}else if(option === 2){ // SPREADSHEET NAME =SNAME(2)
return ss.getName();
}else{
return "#N/A"; // ERROR MESSAGE
};
};
然后你可以在它的基础上创建一个字符串生成器
=ARRAYFORMULA(TEXTJOIN(",", 1, SNAME(1)&"!D5:D"))
甚至可以复制粘贴的完整公式:
=ARRAYFORMULA("=COUNT('"&TEXTJOIN(",'", 1, SNAME(1)&"'!B5:B")&")")
当然,如果你精通 JS 并且有一些花哨的onOpen/onEdit或时间触发器
,运行当然可以通过脚本完全管理它
至于 John/Katrina 问题,您可以使用 COUNTIFS
而不是 COUNTIF
。在那里你可以定义多个标准来获得你想要的数量。例如:
=COUNTIFS(kkweb!D5:D, "New Requests", kkweb!E5:E, "John")
我创建了一个 google sheet。单个 google sheet 内有多个 sheets(制表符)。
我有一个 sheet 叫 Dashboard
还有其他 sheet,例如 kkweb
、virtual
。目前除仪表板外还有 2 个 sheet。所有 2 sheet 都具有相同的列和结构,即使是新的 sheet 也将具有相同的列和结构。
我想对 dashboard
sheet.
- 统计任务总数
=COUNT(kkweb!B5:B,virtual!B5:B)
- 总计数 "New Requests"
=(COUNTIF(kkweb!D5:D,"New Requests")) + (COUNTIF(virtual!D5:D,"New Requests"))
注意:我上面的公式运行得很好,但我将有 20+ sheet 而不是 2。所以我的计数公式将像
=COUNT(kkweb!B5:B,virtual!B5:B,Sheet3!B5:B,Sheet4!B5:B,Sheet5!B5:B,Sheet6!B5:B,Sheet7!B5:B)
等
我所有的公式都会很长,每次都有新的sheet。
有什么简单的方法可以在googlesheet秒内进行计算吗?
我们也许可以使用名称配置创建额外的 sheet 并在其中添加 sheet 名称并执行一个简单的公式来完成上述计算
Note: Each sheet will have a different name, not sheet1, sheet2, sheet3.
其次,我如何根据所有 sheet 中的其他列计算值。
例如:=(COUNTIF(kkweb!D5:D,"New Requests"))
这个公式计算的是 kkweb sheet 中 D5:D 的值为 New Requests
的地方。我还有另一列 C5:C,其中包含名称 "John"、"Katrina" 等
所以基本上我想检查 New Requests
有多少是 "John"
有几种方法可以解决这个问题。这取决于你想走多远,例如。你喜欢哪条路线。在内部没有检测 sheet 名称的公式,因此您需要一个脚本。有几个例如:
function SNAME(option) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet()
var thisSheet = sheet.getName();
if(option === 0){ // ACTIVE SHEET NAME =SNAME(0)
return thisSheet;
}else if(option === 1){ // ALL SHEET NAMES =SNAME(1)
var sheetList = [];
ss.getSheets().forEach(function(val){
sheetList.push(val.getName())
});
return sheetList;
}else if(option === 2){ // SPREADSHEET NAME =SNAME(2)
return ss.getName();
}else{
return "#N/A"; // ERROR MESSAGE
};
};
然后你可以在它的基础上创建一个字符串生成器
=ARRAYFORMULA(TEXTJOIN(",", 1, SNAME(1)&"!D5:D"))
甚至可以复制粘贴的完整公式:
=ARRAYFORMULA("=COUNT('"&TEXTJOIN(",'", 1, SNAME(1)&"'!B5:B")&")")
当然,如果你精通 JS 并且有一些花哨的onOpen/onEdit或时间触发器
,运行当然可以通过脚本完全管理它至于 John/Katrina 问题,您可以使用 COUNTIFS
而不是 COUNTIF
。在那里你可以定义多个标准来获得你想要的数量。例如:
=COUNTIFS(kkweb!D5:D, "New Requests", kkweb!E5:E, "John")