SUMPRODUCT公式中的逻辑评估问题

时间:2019-01-18 10:48:26

标签: excel

我正在使用基于SUMPRODUCTSUBTOTALOFFSET的公式。仅使用条件启用可见行计数。我尝试如下简单的示例数据。数据从B4标题B3范围内的B4:B12开始:

B Column
HD
2
2
4
6
2
1
8
9
2

公式为:

=SUMPRODUCT((B4:B12=B4)*(SUBTOTAL(103,OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))))

对于2的值,它给出4个计数的正确结果。 我去评估该公式以完全理解其逻辑。我可以理解其逻辑的主要部分,但是某些步骤对我而言并不十分清楚。我在下面用我的评论复制评估步骤。

步骤-1

=SUMPRODUCT(({2;2;4;6;2;1;8;9;2}=2)*(SUBTOTAL(103,OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))))

步骤-2

=SUMPRODUCT(({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE})*(SUBTOTAL(103,OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))))

STEP-3

=SUMPRODUCT(({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE})*(SUBTOTAL(103,OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))))

STEP-4

=SUMPRODUCT(({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE})*(SUBTOTAL(103,OFFSET($B$4,{4;5;6;7;8;9;10;11;12}-MIN({4;5;6;7;8;9;10;11;12}),0))))

STEP-5

=SUMPRODUCT(({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE})*(SUBTOTAL(103,OFFSET($B$4,{4;5;6;7;8;9;10;11;12}-4),0))))

STEP-6

=SUMPRODUCT({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE}*(SUBTOTAL(103,OFFSET($B$4,{0;1;2;3;4;5;6;7;8},0))))

为什么{0;1;2;3;4;5;6;7;8} ??

STEP-7

=SUMPRODUCT({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE}*(SUBTOTAL(103,{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;})))

为什么{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;}? STEP-8

=SUMPRODUCT({TRUE;TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;TRUE}*({1;1;1;1;1;1;1;1;1}))

如何用1代替#VALUE! 步骤9

=SUMPRODUCT({1;1;0;0;1;0;0;0;1})

步骤-10

 4

我在以下几点上不太清楚

STEP-6:为什么选择{0;1;2;3;4;5;6;7;8}

STEP-7:为什么选择{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;}

STEP-8:如何用1代替#VALUE!

希望有人可以帮助阐明这些提到的问题背后的逻辑。请原谅我要求澄清这种琐碎的事情。

1 个答案:

答案 0 :(得分:3)

STEP-6:为什么选择{0;1;2;3;4;5;6;7;8}

因为{4;5;6;7;8;9;10;11;12}-4的值为{4-4;5-4;6-4;7-4;8-4;9-4;10-4;11-4;12-4}的{​​{1}}

STEP-7:为什么选择{0;1;2;3;4;5;6;7;8}

在数组上下文中,公式求值器无法通过{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!} = OFFSET($B$4,{0;1;2;3;4;5;6;7;8},0)从9个单元格引用中获取值。但这没关系,因为:

STEP-8:如何用{$B$4;$B$5;$B$6;$B$7;$B$8;$B$9;$B$10;$B$11;$B$12}代替1

#VALUE!是一个SUBTOTAL(103,...小计,对于在步骤7中获得的9个单元格引用中的每个单个单元格引用,如果未隐藏则为1,否则为0。因此无所谓是否评估单元格值。

顺便说一句:使用

可以实现相同的效果
COUNTA

注释: 这些公式是反复试验的结果。我怀疑任何=SUMPRODUCT((B4:B12=B4)*(SUBTOTAL(103,INDIRECT("B"&ROW(B4:B12))))) 程序员都能够预测他们实现的功能的所有用法。 Excel函数的用法很普遍,超出了原本他们的想象范围。


奖金:

Excel

使用您在=SUMPRODUCT(OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0)) 中的值得出0。

此处,公式求值器也无法从数组上下文中通过B4:B12 = OFFSET($B$4,{0;1;2;3;4;5;6;7;8},0)获取的9个单元格引用中获取值。结果是{$B$4;$B$5;$B$6;$B$7;$B$8;$B$9;$B$10;$B$11;$B$12}。但是现在很重要,因为我们需要这些值。

在这种情况下,我们可以使用{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}函数来强制获取值

N

结果为36,即=SUMPRODUCT(N(OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0))) 中的值之和。