【问题标题】:Logic evaluation problem in SUMPRODUCT FormulaSUMPRODUCT公式中的逻辑评估问题
【发布时间】:2019-01-18 20:20:38
【问题描述】:

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

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 个计数的正确结果。 我去评估公式以完全理解其逻辑。我可以理解其逻辑的主要部分,但某些步骤对我来说不是很清楚。我正在用我的 cmets 重现下面的评估步骤。

步骤-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))))

好的

第三步

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

好的

第四步

=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))))

好的

第五步

=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))))

好的

第六步

=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} ??

第七步

=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!;} ?? 第八步

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

如何1 而不是#VALUE! STEP-9

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

好的

步骤-10

 4

好的

我对以下几点不太清楚

第 6 步:为什么要{0;1;2;3;4;5;6;7;8}

第 7 步:为什么要{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;}

第 8 步:如何使用 1 代替 #VALUE!

希望有人帮助澄清这些提及点背后的逻辑。请原谅我就这么琐碎的事情问清楚。

【问题讨论】:

  • 第 6 步是 ROW(B4:B12)-MIN(ROW(B4:B12) 的结果,因此您从行中取出 4 以获得基于 0 的索引
  • 就 STEP 7 而言 - 我会假设 B$4$:B$12 都会导致 #VALUE 错误? - 如果不是,您能否确认其中的值或如果它是敏感数据则喜欢值
  • 我在功能区的“公式”选项卡中借助“评估公式”的帮助下,通过对公式评估期间的各个步骤进行截图来重现步骤。除了我提到的以外,我们没有得到任何值。我已经在问题本身的第一段中提到了我使用的数据值。感谢您对此事的关注和时间。

标签: excel


【解决方案1】:

第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},即{0;1;2;3;4;5;6;7;8}

第 7 步:为什么要{#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!}

公式评估器无法从数组上下文中通过 OFFSET($B$4,{0;1;2;3;4;5;6;7;8},0) = {$B$4;$B$5;$B$6;$B$7;$B$8;$B$9;$B$10;$B$11;$B$12} 获得的 9 个单元格引用中获取值。但这并不重要,因为:

第8步:如何1而不是#VALUE!

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

顺便说一句:同样可以使用

=SUMPRODUCT((B4:B12=B4)*(SUBTOTAL(103,INDIRECT("B"&ROW(B4:B12)))))

注释: 这些公式是反复试验的结果。我怀疑任何Excel 程序员能够预测他们实现的功能的所有用法。有很多Excel 函数在野外的用法,这些用法与他们最初无法想到的一样多。


奖金:

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

使用您在 B4:B12 中的值得出 0。

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

在这种情况下,我们可以使用N 函数来强制获取值

=SUMPRODUCT(N(OFFSET(B4,ROW(B4:B12)-MIN(ROW(B4:B12)),0)))

这将得到 36,即您在 B4:B12 中的值的总和。

【讨论】:

  • 对大于 4 的值应用过滤器后,我得到正确的结果为 0.. 第 7 步数组仍显示 {#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;#VALUE!;} 但第 8 步正确显示 ({0;0;0;1;0;0;1;1;0}) 导致 0。所以它评估正确,但所有职位都显示为#VALUE!; 你真是个天才。感谢您提供清晰的信息。关于第 7 步中这个奇怪的#VALUE!; 反射的任何观点。
  • @skkakkar:“你真是个天才。”:显然不是。在我的注释中,Excel 程序员是我们站在他们肩膀上的巨人。
猜你喜欢
  • 1970-01-01
  • 2012-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多