改进 Count、CountIF Google Sheets 公式

Improving Count, CountIF Google Sheets formulas

我创建了一个 google sheet。单个 google sheet 内有多个 sheets(制表符)。

我有一个 sheet 叫 Dashboard

还有其他 sheet,例如 kkwebvirtual。目前除仪表板外还有 2 个 sheet。所有 2 sheet 都具有相同的列和结构,即使是新的 sheet 也将具有相同的列和结构。

我想对 dashboard sheet.

进行一些计算
  1. 统计任务总数

=COUNT(kkweb!B5:B,virtual!B5:B)

  1. 总计数 "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")