为什么索引匹配在 Microsoft Excel 中得到错误结果?

为什么索引匹配在 Microsoft Excel 中得到错误结果?

在此处输入图片描述

我使用的公式是

=INDEX(F:F,MATCH(K2,A:A)*(B:B=L2),0)

答案1

在此处输入图片描述

改用 SUMPRODUCT:

=SUMPRODUCT(INT(A2:A7=F2),INT(B2:B7=G2),C2:C7)

A2:A7=F2 返回一个 TRUE/FALSE 数组,指示数组中的项是否与正在搜索的 SYMBOL 匹配。将其包装在 INT 中会将其转换为 1/0。第二个参数使用相同的方法来查找具有正确日期的行。第三个参数是价格数组。

SUMPRODUCT 函数将每个数组相乘,然后对结果数组求和。您可以在上图中看到 J 列到 N 列的细分情况。

答案2

问题在于它MATCH()返回单个值,即在 A 列中找到第一个匹配项的行。然后将其乘以 B 列测试生成的数组,得到 0 和“1 * A 中产生第一个匹配项的任何行”。

只有后半部分如您所料。前半部分,您可能想要一个类似的数组,这样您就可以将数组逐个元素相乘,从而仅产生符合两个条件的非零值。

因此,由于第一行与函数匹配MATCH(),因此您将获得该行INDEX()。在公式内部,这主要为您提供 0,并且对于与日期匹配的任何行,该行号(在本例中为 1)乘以 1。遵循此模式的某些内容:{1,0,0,0,0,0,1,1,1,1,1,1,1,1},乘法产生相同的结果,因为乘以的是 1。(如果第一个匹配项是列的第 3 行,则将像这样,但使用 3 而不是 1。)

然后,如果您的 Excel 版本具有SPILL该功能,您将获得一个与您的范围大小相同的数组(一百万个元素……)。如果没有SPILL,如果您正常输入公式(按),您将获得一个返回值Enter。如果您只有一个单元格,或者选择了一个范围,然后使用{CSE}(CSE = Control-Shift-Enter),您将获得一个单元格或所有选定的范围,返回来自最终数组的元素。这看起来很奇怪,它的SPILL等价物也是如此,因为您必须记住,它将匹配日期标准行,而不是代码行。

事实上,您没有提到SPILL输出或将其作为数组公式输入,这表明您有一个旧版本并将其“正常”输入到单个单元格中。

在这种情况下,它仅显示数组的第一个输出。由于数据的第一行实际上与查找的代码匹配,因此您会得到一个看似有意义的结果,尽管它是错误的,但它会误导您认为事情只需要进行一些细微的调整即可完美。但事实并非如此。(如果第一个不匹配,您可能不会认为它“非常接近”,但这种情况确实发生了,是吗?)

对于第一列,您需要采用完全不同的方法。我的意思并不是说不使用整列,因为我认为这只是为了让我们更容易掌握公式的要点。当我使用整列时,Excel 在我愿意等待的 4-5 分钟内永远不会停止计算!所以我的意思是“考虑一下”,但重点是您需要以不同的方式构建第一个数组,这种方式返回一个与 B 列测试生成的数组相匹配的数组,而不是单个值(“单元素数组”以扩展您对此的看法)。然后事情就会顺利进行。

这就是FlexYourData正在做的事情,向您展示创建该数组的方法。

所以,归根结底,这实际上MATCH()产生了一个单一的值。(数据中数据索引号中的第一个匹配行(恰好与此处的行号匹配,但如果数据在 A34:A23048 中则不会匹配),而不是仅包含所有匹配项索引号的数组,或者所有匹配项的索引号中都散布着 0,而单元格不匹配。)而且由于您需要一个数组来完成尝试,因此它根本不是要使用的函数。

相关内容