当您使用此“产品”版本时,与 IF 语句相反,您的两个测试中的任何一个返回 FALSE 的任何行都将生成零结果。这是因为,当取布尔值的乘积时,TRUExFALSE=0 和 FALSExTRUE=0。因此,传递给 MIN 的数组可能包含许多零,从而导致不良结果。
使用 IF 语句,必须在数组公式中,这些相同的行被分配一个布尔 FALSE,而不是零。而且,由于 MIN 忽略了布尔值,因此这种设置保证了正确的结果。
作为说明,仅考虑 A6:C10 的范围,假设我们有以下值:
O12:“X”
A6:(空白)
A7:(空白)
A8:“X”
A9:(空白)
A10:“X”
C6:74
C7:64
C8:99
C9:58
C10:65
非数组公式:
=MIN(INDEX((A6:A10=O12)*(C6:C10),0))
将解析为:
=MIN(INDEX(({"";"";"X";"";"X"}=O12)*(C6:C10),0))
这是:
=MIN(INDEX(({FALSE;FALSE;TRUE;FALSE;TRUE})*(C6:C10),0))
即:
=MIN(INDEX({0;0;99;0;65},0))
(由于 C6、C7 和 C9 中的值乘以 FALSE,它们的结果为 0。)
即:
=MIN({0;0;99;0;65})
显然是 0。
但是,等价的数组公式:
=MIN(IF(A6:A10=O12,C6:C10))
解析为:
=MIN(IF({"";"";"X";"";"X"}=O12,C6:C10))
这是:
=MIN(IF({FALSE;FALSE;TRUE;FALSE;TRUE},C6:C10))
即:
=MIN(IF({FALSE;FALSE;TRUE;FALSE;TRUE},{74;64;99;58;65}))
即:
=MIN({FALSE;FALSE;99;FALSE;65})
根据需要,这次是 65。
如果您真的不想使用数组公式(尽管我不明白为什么会出现这种情况 - 除了需要按键组合之外,许多人似乎没有意识到这种使用插入的解决方法一个(额外的)INDEX 函数并不比数组设置更有效)那么,如果你有 Excel 2010 或更高版本,你可以使用 AGGREGATE,即:
=AGGREGATE(15,6,C6:C10/(A6:A10=O12),1)
问候