我使用的公式是
=INDEX(F:F,MATCH(K2,A:A)*(B:B=L2),0)
答案1
答案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,而单元格不匹配。)而且由于您需要一个数组来完成尝试,因此它根本不是要使用的函数。