【问题标题】:Excel Min function not workingExcel Min 函数不起作用
【发布时间】:2014-12-19 15:40:18
【问题描述】:

我有一个数组,我试图返回与输入到 O12 中的参考号相对应的最大和最小时间。

我想要这样当我在 O12 中输入 10 时,我的 max 函数给我 3:00,我的 min 给我 1:00

A-----B-----C

10----------1:00

10----------3:00


{=MAX(INDEX((A6:A200=O12)*(C6:C200),0))}
{=MIN(INDEX((A6:A200=O12)*(C6:C200),0))}

我的 max 函数完美运行并返回最大的数字,但我的 min 函数始终显示为零。

【问题讨论】:

    标签: excel excel-formula min


    【解决方案1】:

    当您使用此“产品”版本时,与 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)
    

    问候

    【讨论】:

    • 很好的答案!正如您所说,它作为数组公式可以正常工作,但我不明白为什么我不能使用与 JNevill 相同的解决方法和索引函数 =MIN(INDEX(IF(A6:A10=O12,C6:C10) ,0))
    • 就是这样。以这种方式使用,并且没有数组条目,单独的 INDEX 无法强制 IF 语句对传递给它的数组中的所有元素进行操作。请问你为什么这么坚持避免CSE?
    • 我个人对他们很好。您可能会争辩说,如果使用索引提供了一种一致的方式来获得数组公式的效果,有些人可能更喜欢使用它 - 但显然它没有。
    • 是的,有些人尝试这样做,除了少数情况(例如这里的 IF 语句)之外,它是一种完全可以接受的技术。我要补充一点,尽管避免了使用 CSE 的需要,但它确实有一个缺点,即它使公式对读者不太友好。更重要的是,虽然为此目的插入单个 INDEX 公式非常好,但在我看来,不建议在单个公式中使用最多两个或三个来强制数组强制。在这些情况下,性能明显比等效的阵列设置差。
    【解决方案2】:

    您正在检查某项的最小值或 0。由于您要查找的某项是正数,因此每次都以 0 获胜。尝试使用较大的数字进行比较,例如

    {=MIN(INDEX((A6:A200=O12)*(C6:C200),2E99))}
    

    【讨论】:

    • 我明白你在说什么。试过了,只是给了我一个REF!不过。
    • 另外,我可能弄错了,但我认为 0 是索引函数的一部分 #
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2021-05-26
    • 1970-01-01
    相关资源
    最近更新 更多