使用“图表系列值”的MODE.MULTdynamic生成数组会导致Excel 2010崩溃

首先,我想澄清一下,我正在寻找一个技术性的解释, 为什么会出现以下问题,而不是为了达到预期结果的替代设置(我将在任何情况下提出几个这样的替代品,作为这个问题)。

另外,我还没有在Excel 2010以外的Excel 2010版本中testing过,所以我不知道这个问题是否是版本特定的。

 Row/ BC Col 1 X 91 2 X 96 3 X 21 4 X 64 5 3 6 X 60 7 52 8 X 37 9 79 10 91 

假设所有的input都是在Sheet1 ,那么例如给出一系列在C1:C10范围内的数字,并且B1:B10中的每个input都是“X”或不是(上面给出的例子),下面的施工:

=INDEX($C:$C,N(IF(1,MODE.MULT(IF($B$1:$B$10="X",{1,1}*ROW($B$1:$B$10))))))

将被强制执行,将生成一个n个条目的垂直数组,其中n等于下面的结果:

=COUNTIF($B$1:$B$10,"X")

该数组将包含来自C列的n个条目,其列B中的对应条目是“X”。 对于上面的例子,这个结构会返回:

{91;96;21;64;60;37}

然后将此公式作为Name Manager的(工作簿范围) Defined Nameinput,例如名称Series_MODE_MULT 。 需要注意的是,作为一个Defined Name ,这个构造在默认情况下被评估为一个array formula ,所以满足了前面提到的“被强制转换”的条件。

当试图创build一个简单的图表(例如,列)与一个系列,其Series Valuesinput为:

=Sheet1!Series_MODE_MULT

Excel立即崩溃。

但为什么?

我已经search了几个小时的解释。 我能想出的唯一类似的情况是在build筑物内使用INDIRECT作为图表的Series Values ; 然而,虽然这也是无效的(事实上我们可以使用EVALUATE开发一个解决方法),但是用户遇到了错误消息“ 这个工作表中的一个公式包含一个或多个无效的引用 ”,这当然不是所有这一切一样平坦崩溃。

我的标题表明这个问题可能与MODE.MULTfunction有关。 我的推理是,我们可以使用替代(虽然更长,在某些情况下,挥发性)的结构,产生所需的数组,但作为图表的Series Values传递时,是完全有效的:

=INDEX($C:$C,N(IF(1,SMALL(IF($B$1:$B$10="X",ROW($B$1:$B$10)),ROW(INDEX($A:$A,1):INDEX($A:$A,COUNTIF($B$1:$B$10,"X")))))))

要么:

=N(OFFSET($C$1,SMALL(IF($B$1:$B$10="X",ROW($B$1:$B$10)-MIN(ROW($B$1:$B$10))),ROW($A$1:OFFSET($A$1,COUNTIF($B$1:$B$10,"X")-1,))),))

只是两个这样的例子。

MODE.MULT有点负责任吗? 是什么使这种结构在工作表中有效,但不在图表的Series Values ? 是否还有其他的结构/function,这样使用,同样会导致Excel崩溃? 如果是这样,这种行为的解释是什么?

任何帮助将不胜感激。

问候