Filter 使用表过滤进行计数,或者SUMPRODUCT/小计/抵销组合实际如何工作?

Filter 使用表过滤进行计数,或者SUMPRODUCT/小计/抵销组合实际如何工作?,filter,count,excel-formula,subtotal,walkthrough,Filter,Count,Excel Formula,Subtotal,Walkthrough,给出以下Excel表格: +---+--------+----+----+ || A | B | C| +---+--------+----+----+ |1 | Filter | V1 | V2 |首先让我们看看SUMPRODUCT: SUMPRODUCT期望其参数为数组(矩阵)。所以 =SUMPRODUCT((B2:C4=“x”) 根据if(B2:C4=“x”)获取{TRUE,TRUE;TRUE,FALSE;TRUE,FALSE}的数组 =SUMPRODUCT((B2:C4=“x”)*1)

给出以下Excel表格:

+---+--------+----+----+
|| A | B | C|
+---+--------+----+----+

|1 | Filter | V1 | V2 |首先让我们看看SUMPRODUCT: SUMPRODUCT期望其参数为数组(矩阵)。所以

=SUMPRODUCT((B2:C4=“x”)

根据if
(B2:C4=“x”)
获取
{TRUE,TRUE;TRUE,FALSE;TRUE,FALSE}
的数组

=SUMPRODUCT((B2:C4=“x”)*1)

将在数值上下文中获取布尔值,如
{1,1;1,0;1,0}
。现在SUMPRODUCT将对该数组求和,得到4

=小计(3,B2:C4)
仅当
B2:C4
中的单个单元格由于被过滤掉而不可见时才会计数。所以未过滤时得到6,但如果过滤掉F2,则得到4

{=OFFSET(B2:C4,ROW(B2:C4)-MIN(ROW(B2:C4)),0,1,1)}
在数组上下文中使用获取
{=OFFSET(B2:C4,{2;3;4}-2,0,1,1)}
向下移动
{code>B2:C4,{0;1;2}
行,每侧移0列,高度为1,宽度为1,导致
{B2;B3;B4}

所以我们有小计

{=SUBTOTAL(3,{B2;B3;B4})}
如果未筛选出
{B2;B3;B4}
,则只计算1

因此,当过滤掉F2(B3)时,小计的结果是:
{1;0;1}

在SUMPRODUCT和out filtered第3行中,我们有:

=SUMPRODUCT((B2:C4=“x”)*{1;0;1})

这是
{TRUE,TRUE;TRUE,FALSE;TRUE,FALSE}*{1;0;1}
=
{1,1;0,0;1,0}
,总和为3


为了简化这一点,我将使用

=SUMPRODUCT((B2:C4=“X”)*小计(3,间接(“A”)和行(2:4))

除了
间接
导致
{A2;A3;A4}
之外,其工作方式相同,并且由于“A”是固定文本字符串,如果要在列A之前插入列,则必须更改公式


对于
OFFSET
变量,这是不必要的,因为所有参数都是单元格引用,当插入列时,这些单元格引用会自动更新。

感谢您提供的详细答案。还有一点我不太清楚:为什么
{=OFFSET(B2:C4,{0;1;2},0,1,1)}
会导致
{B2;B3;B4}
?当我们将矩阵作为第一个
偏移量
参数(
B2:C4
)而不是单个值时会发生什么?嗯,这不是重点。如果向下偏移
B2:C4
一行,则得到
B3:C5
。但在使用的偏移公式中,高度和宽度始终为1。见我的补充答案。