【问题标题】:Improving Count, CountIF Google Sheets formulas改进 Count、CountIF Google 表格公式
【发布时间】:2020-01-15 00:35:18
【问题描述】:

我创建了一个谷歌表格。单个 Google 工作表中有多个工作表(标签)。

我有一张名为Dashboard的工作表

还有其他表格,例如kkwebvirtual。目前除了仪表板还有 2 个其他工作表。两张表都有相同的列和结构,即使是新的表也有相同的列和结构。

我想在dashboard 工作表上执行一些计算。

  1. 统计总任务数

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

  1. 统计“新请求”总数

=(COUNTIF(kkweb!D5:D,"New Requests")) + (COUNTIF(virtual!D5:D,"New Requests"))

注意:我上面的公式运行良好,但我将有 20 多张而不是 2 张。所以我的计数公式将像

=COUNT(kkweb!B5:B,virtual!B5:B,Sheet3!B5:B,Sheet4!B5:B,Sheet5!B5:B,Sheet6!B5:B,Sheet7!B5:B)

每次有新表格出现时,我的所有公式都会很长。

有没有什么简单的方法可以在谷歌表格中进行计算?

我们也许可以创建带有名称配置的额外工作表并在那里添加工作表名称并执行一个简单的公式来进行上述计算

注意:每个工作表都有不同的名称,而不是 sheet1、sheet2、 表 3。

其次,如何根据所有工作表中的其他列计算值。

例如:=(COUNTIF(kkweb!D5:D,"New Requests")) 此公式计算 kkweb 表中 D5:D 中值为 New Requests 的位置。我还有另一列 C5:C,其中包含名称“John”、“Katrina”等

所以基本上我想检查New Requests 有多少计数是“约翰”

【问题讨论】:

    标签: google-apps-script google-sheets google-sheets-formula array-formulas textjoin


    【解决方案1】:

    有几种方法可以解决这个问题。这取决于你想走多远,例如。你喜欢哪条路线。在内部没有检测工作表名称的公式,因此您需要一个脚本。有几个例子:

    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")
    

    【讨论】:

    • 好吧,我稍微修改了你的脚本,并从公式中删除了不必要的表格。我想问一下 COUNTIFS,上面的 COUNTIFS 只适用于单张纸,对吧?对于多张工作表呢,我在多张工作表中有相同的场景,我想在所有工作表中计算对 john 的新请求
    • 您可以使用 {} 来表示:=COUNTIFS({kkweb!D5:D;virtual!D5:D}, "New Requests", {kkweb!E5:E;virtual!E5:E}, "John")
    • 这个可以用ArrayFormula生成吗?
    • 当然,你可以生成任何你想要的字符串
    • 试试:=ARRAYFORMULA("=COUNTIF({'"&TEXTJOIN(";'", 1, SNAME(1)&"'!B5:B")&"}, ""New Request"")")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    • 2015-10-21
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多