【问题标题】:How to add a COUNTIF within an ARRAYFORMULA using wildcards/partial match如何使用通配符/部分匹配在 ARRAYFORMULA 中添加 COUNTIF
【发布时间】:2021-07-17 08:36:55
【问题描述】:

我正在构建一个仪表板来跟踪与团队成员角色相关的各种事情。这包括他们领导活动的次数以及他们何时支持各种功能。我有兴趣为每个团队成员添加“支持角色”的数量。 为了实现这一点,我目前使用一个单独的公式,其总 COUNTIF 使用名称周围的“*”通配符减去每个人领导的时间的 COUNTIF(因为这不是支持角色,并且计入 QUERY 函数。

=COUNTIF($A$1:$E,"*"&G2&"*")-COUNTIF($A$1:$A,G2)

这意味着当更多团队成员带头参加活动时,我必须填写公式。

此数据结构的模型位于以下链接的“数组”表中:https://docs.google.com/spreadsheets/d/1lyCK5eIEQYjGFOxh5T_4BxeuDS-1zvMLq80IYn0dc38/edit#gid=1056844943

K2:K5 有手动 COUNTIF 公式。 G8 使用创建所需表格格式的公式数组(即,在 G8 中设置的数组中创建的 COUNTIF 公式)。

={QUERY(A1:E,"select A, count(A) where A is not null group by A label A 'Lead', count(A) 'Total Leads'",1),QUERY(A1:E,"select sum(B) where A is not null group by A label sum(B) 'Total #1'",1),QUERY(A1:E,"select sum(C) where A is not null group by A label sum(C) 'Total #2'",1),{"Total Support Roles";ARRAYFORMULA(COUNTIF((A2:E),QUERY(QUERY(A2:E,"select A, count(A) where A is not null group by A",0),"select Col1 where Col1 is not null",0)))}}

最后一个子数组包含 ARRAYFORMULA(COUNTIF 结构;不幸的是,我无法成功将此公式用于部分匹配/通配符,因为我正在使用嵌套查询公式来动态更新和匹配数组大小(它也不包括标题以保持数组大小对齐)。

=ARRAYFORMULA(COUNTIF((A2:E),QUERY(QUERY(A2:E,"select A, count(A) where A is not null group by A",0),"select Col1 where Col1 is not null",0)))

在我看来,可能有一些公式组合可能包括 SPLIT 来创建解决方案;不幸的是,我还没有找到,因此正在寻求帮助。非常感谢您的考虑。

【问题讨论】:

  • 更新:链接更改为直接打开“数组”选项卡

标签: google-sheets google-sheets-formula


【解决方案1】:

试试这个公式

=ArrayFormula(QUERY({A2:E, COUNTIF(B2:E, "*"&A2:A&"*")},"select Col1, count(Col1), sum(Col2), sum(Col3), Col6  where Col1 is not null group by Col1, Col6 label Col1 'Lead', count(Col1) 'Total Leads', sum(Col2) 'Total #1', sum(Col3) 'Total #2', Col6 'Total Support Roles'",0))

看看有没有帮助?

【讨论】:

    【解决方案2】:

    尝试在K2 中逐行获取总支持角色:

    =arrayformula( countif(D2:E, "*" & G2:G5 & "*") )

    通过一些重新排列,该公式可以成为您在G8 中的较长数组公式的一部分,但我建议您将每个子公式放在其自己的单元格中。如果您将所有公式都包裹在同一个 { array expression } 中,您最终可能会遇到数组高度不匹配的问题。

    【讨论】:

      【解决方案3】:

      有 3 件事需要注意:

      1. countif($A$1:$E,"*"&G2&"*")-countif($A$1:$A,G2) 实际上等同于 countif($B$1:$E,"*"&G2&"*")。不是先添加 A 列然后再减去它,而是首先不计算它。
      2. arrayformula(countif($B$1:$E,"*"&G2:G&"*")) 符合您的预期:如果每次更改 G 行上的单元格,每行都会计算计数。
      3. 您可以使用数组语法 ({range1, range2}) 将用于查询的当前范围与此结果连接起来。值得注意的是,根据您的语言环境,您可能需要将逗号 (,) 更改为反斜杠 (\)。

      JPV 已经弄清楚了这一点,因此他们制定了公式。这是相同的公式,但传播了,所以更容易理解:

      =arrayformula(
        query(
          {A2:E, countif(B2:E, "*"&A2:A&"*")},
          "SELECT
              Col1,
              count(Col1),
              sum(Col2),
              sum(Col3),
              Col6
            WHERE
              Col1 is not null
            GROUP BY
              Col1,
              Col6
            LABEL
              Col1 'Lead',
              count(Col1) 'Total Leads',
              sum(Col2) 'Total #1',
              sum(Col3) 'Total #2',
              Col6 'Total Support Roles'
          ",
          0
        )
      )
      

      Col1Col5 是列 AECol6countif 结果。

      请注意,您可以将这样的格式粘贴到 Google 表格中并且可以正常工作。

      【讨论】:

      • 非常感谢您的回复。首先,是的,这很有意义;我花了一段时间才想起我为什么这样做。我记得我使用的是命名范围并且不想更改它。我将创建一个新的命名范围,该范围仍会动态更新到您的第二个注释,感谢您阐明使用 ARRAYFORMULA 的通配符设置 COUNTIF 标准的方法;非常有助于理解你的第三个,同样,格式转换对于理解@JPV 响应中实际发生的事情非常有帮助。再次感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-30
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多