【问题标题】:How to use the SUMIFS function in an ARRAYFORMULA, matching two criteria, to avoid copying down?如何在 ARRAYFORMULA 中使用 SUMIFS 函数,匹配两个条件,以避免复制?
【发布时间】:2020-07-27 04:53:25
【问题描述】:

更新:这是一个重复的问题 - 请参阅: Google Sheets ArrayFormula with Sumifs

我提出这个问题是因为今天有人在一个结构很差的问题中提出了这个问题,而他们的问题被阻止回答。 similar question 之前已在 SO 上回答,但它不涉及单独的标准列。我只是想提供一个我在研究这个问题时遇到的答案。

问题是如何进行SUMIFS(和AVERAGEIFS)将范围与其他两列进行比较,而无需对SUMIFS 类型的公式进行下拉。以下是 A:C 列中的数据。要匹配的标准在 F 和 G 列中。

【问题讨论】:

    标签: google-sheets average google-sheets-formula sumifs


    【解决方案1】:

    为什么不:

    =QUERY(A2:C, 
     "select A,B,sum(C),avg(C) 
      where A is not null
      group by A,B
      order by B
      label sum(C)'',avg(C)''")
    

    【讨论】:

      【解决方案2】:

      我遇到的公式使用SUMIF,而不是SUMIFS。它在单元格 K1 中。

      ={"Sum by Array";ARRAYFORMULA(IF(G2:G<>"",SUMIF(A2:A&B2:B , F2:F&G2:G , $C$2:$C),""))}
      

      使用外部数组和初始字符串“Sum by Array”是为了允许将其放置在标题行中。将数据范围 A:B 中的两个初始列连接起来,并与条件范围 F:G 中的两个连接列进行比较。然后SUMIF 将匹配每个条件行的值相加。

      作为一个更复杂的方法的例子,我首先想出了这个公式,它也有效:

      ={"Sum by Array";
        ARRAYFORMULA(IF(LEN(G2:G),IFNA(
            VLOOKUP(G2:G& " " & TEXT(F2:F,"dd/mm/yyyy"),
            TRANSPOSE(
              QUERY(TRANSPOSE(
                QUERY($A$2:$C, "select B, A, sum(C) group by B,A label sum(C) '' ",0)),
                "select *",2)),2,0),"blank"),""))}
      

      重要说明 - 上面最后一个选择语句 "select *",2 中的值“2”是要连接的列数,即标准列数,在本例中为 2。

      我还没有让 AVERAGEIF 以相同的方式工作 - 仍在研究中。使用 SUMiF 结果除以匹配的 COUNTIF 值应该可以工作。或者上面的查询可以通过将“sum(C)”替换为“avg(C)”来实现。

      【讨论】:

        猜你喜欢
        • 2021-12-26
        • 1970-01-01
        • 2020-12-05
        • 1970-01-01
        • 1970-01-01
        • 2020-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多