Filter 使用表过滤进行计数,或者SUMPRODUCT/小计/抵销组合实际如何工作?
给出以下Excel表格: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)
+---+--------+----+----+
|| 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。见我的补充答案。