我想看一个如何让这个公式正常运作的实例
= SUMPRODUCT(小计(3,OFFSET($ P $ 7,ROW($ P $ 8:$ P $ 5500)-ROW($ P $ 7),, 1)), - ($ P $ 7:$ P $ 5500 = “74”))
我想要实现的是计算值大于的范围内的所有单元格 零,但我需要在应用过滤器后才能正常工作。我已经看过几个例子并且没有使用小数字fx。
提前致谢,任何帮助!
答案 0 :(得分:2)
工作示例:
O P
4
5 6
6
7 Filter Data
8 1 74
9 0 74
10 1 74
11 0 74
12 1 74
13 0 74
Formula in P5:
=SUMPRODUCT(SUBTOTAL(103,OFFSET($P$7,ROW($P$8:$P$20)-ROW($P$7),,1)),--($P$8:$P$20=74))
现在您可以过滤列O和P5仅计算可见的74。
对于SUBTOTAL中的函数103,我实际上只计算可见单元格。这意味着,手动隐藏的单元格也不计算在内。对于功能3,仅计算出过滤的单元格。如果手动隐藏了单元格,则会对它们进行计数,即使它们不可见。
我使用了值74而不是文本“74”。所以在我的例子中,P列包含数字,而不是文本。
工作原理:
SUMPRODUCT中的公式在数组(矩阵)上下文中。这意味着它们的处理就像它们在数组公式中一样使用。
在数组上下文{ROW($P$8:$P$20)-ROW($P$7)}
获取ROW($P$8)-ROW($P$7) = 1, ROW($P$9)-ROW($P$7) = 2, ROW($P$10)-ROW($P$7) = 3
,依此类推。
OFFSET($P$7,1,,1)
将获得$ P $ 7 + 1Row = $ P $ 8,OFFSET($P$7,2,,1)
将获得$ P $ 7 + 2Row = $ P $ 9,依此类推。
所以{OFFSET($P$7,ROW($P$8:$P$20)-ROW($P$7),,1)}
得到{$P$8,$P$9,$P$10,...}
在SUBTOTAL(103, {$P$8,$P$9,$P$10,...})
内,如果{$P$8,$P$9,$P$10,...}
可见,则计数为1,否则为0。
所以SUMPRODUCT导致
SUMPRODUCT({1,0,1,0,1,0,0,...}, --($P$8:$P$20=74))
{($P$8:$P$20=74)}
导致{TRUE,TRUE,TRUE,FALSE,TRUE,...}
取决于$ P $ 8:$ P $ 20 = 74。 --
(*-1*-1
)在数字上下文中获取此值,因此TRUE = 1且FALSE = 0.
所以SUMPRODUCT最终会产生
SUMPRODUCT({1,0,1,0,1,0,0,...}, {1,1,1,1,1,1,0,...})
问候
阿克塞尔