如何在 ARRAYFORMULA 中使用 SUMIFS 函数,匹配两个条件,以避免向下复制?
How to use the SUMIFS function in an ARRAYFORMULA, matching two criteria, to avoid copying down?
更新:这是一个重复的问题 - 请参阅:
我提出这个问题是因为今天有人在一个结构不佳的问题中提出这个问题,而他们的问题被阻止回答。 之前在 SO 上回答过,但它不涉及单独的标准列。我只是想提供一个我在研究这个问题时遇到的答案。
问题是如何进行 SUMIFS
(和 AVERAGEIFS
)比较一个范围与其他两列,而不必对 SUMIFS
类型的公式进行下拉.这是数据的样子,在列 A:C 中。要匹配的条件在列 F 和 G 中。
我遇到的公式使用 SUMIF
,而不是 SUMIFS
。它在单元格 K1 中。
={"Sum by Array";ARRAYFORMULA(IF(G2:G<>"",SUMIF(A2:A&B2:B , F2:F&G2:G , $C:$C),""))}
使用外部数组和初始字符串“按数组求和”是为了允许将其放置在 header 行中。数据范围 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:$C, "select B, A, sum(C) group by B,A label sum(C) '' ",0)),
"select *",2)),2,0),"blank"),""))}
重要说明 - 上面最后一个 select 语句 "select *",2
中的值“2”是连接的列数,即条件列数,在本例中为 2 .
我还没有让 AVERAGEIF 以同样的方式工作 - 仍在研究中。使用 SUMiF 结果除以匹配的 COUNTIF 值应该可行。或者上述查询有效,将“sum(C)”替换为“avg(C)”。
为什么不呢:
=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)''")
更新:这是一个重复的问题 - 请参阅:
我提出这个问题是因为今天有人在一个结构不佳的问题中提出这个问题,而他们的问题被阻止回答。
问题是如何进行 SUMIFS
(和 AVERAGEIFS
)比较一个范围与其他两列,而不必对 SUMIFS
类型的公式进行下拉.这是数据的样子,在列 A:C 中。要匹配的条件在列 F 和 G 中。
我遇到的公式使用 SUMIF
,而不是 SUMIFS
。它在单元格 K1 中。
={"Sum by Array";ARRAYFORMULA(IF(G2:G<>"",SUMIF(A2:A&B2:B , F2:F&G2:G , $C:$C),""))}
使用外部数组和初始字符串“按数组求和”是为了允许将其放置在 header 行中。数据范围 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:$C, "select B, A, sum(C) group by B,A label sum(C) '' ",0)),
"select *",2)),2,0),"blank"),""))}
重要说明 - 上面最后一个 select 语句 "select *",2
中的值“2”是连接的列数,即条件列数,在本例中为 2 .
我还没有让 AVERAGEIF 以同样的方式工作 - 仍在研究中。使用 SUMiF 结果除以匹配的 COUNTIF 值应该可行。或者上述查询有效,将“sum(C)”替换为“avg(C)”。
为什么不呢:
=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)''")