【问题标题】:How I do exclude 0 when using MIN with an IF?将 MIN 与 IF 一起使用时如何排除 0?
【发布时间】:2013-01-09 18:38:18
【问题描述】:

我有一个包含 2 个工作表的工作簿,Sheet1Sheet2

Sheet1 有一个值(产品代码)要查找,还有一个空单元格要填充:

A      B
A100
A200
B150
C3AB

Sheet2有一堆产品代码和费用:

A      B
A100   35
A100   14
A100    0
A200   10
A200   12
etc, etc, etc

我在 Sheet1 B1 中使用以下公式从 Sheet2 中查找 MIN 匹配值:

=MIN(IF(Sheet2!$A$1:$A$5=A1,Sheet2!$B$1:$B$5))

如何排除返回 0 的匹配项?对于产品 A100,我想返回最低的非零匹配,即 14。

【问题讨论】:

    标签: excel excel-formula


    【解决方案1】:

    尝试在 B1 中将其作为数组公式提交

    未经测试

    =MIN(IF(((Sheet2!$A$1:$A$5=A1)*(Sheet2!$B$1:$B$5>0))>0,Sheet2!$B$1:$B$5))
    

    我认为这会奏效

    【讨论】:

    • 谢谢,但还是找到了 MIN 值 0
    • @scott 这将适用于 有限 范围,但是 B 中的长列表呢?
    • 它应该可以工作,只要你不吃掉你所有的记忆(特别是在'03),如果 B 中的列表太长以至于公式占用太多内存,他可能应该使用 vba而不是公式
    • 计算可能需要一点时间,但如果你只做一次,只需复制新列并将它们粘贴为值,否则如果它对你来说太慢,你应该研究一个 vba 解决方案
    • 使用两个 IF 可能比与 * 相乘更有效,即=MIN(IF(Sheet2!$A$1:$A$5=A1,IF(Sheet2!$B$1:$B$5>0,Sheet2!$B$1:$B$5)))
    【解决方案2】:

    如果您在工作表 1 上添加 C 列并填写以下内容会更快吗:

    =IF(B1=0," ",B1)
    

    那么您作为矩阵输入的原始公式将改为引用 C 列:

    =MIN(IF(Sheet2!$A$1:$A$5=A1,Sheet2!$C$1:$C$5))
    

    任何人都可以评论添加另一列的速度吗?听起来工作表最多有 ~20000 行。

    【讨论】:

      【解决方案3】:

      数组公式:

      {=SMALL(IF(Sheet2!$B$1:$B$5<>0;IF(A3=Sheet2!$A$1:$A$5;Sheet2!$B$1:$B$5;"");"");1)}
      

      在公式窗口中按 Shift-Ctrl-Enter 插入,大括号是 Excel 插入的,不是用户插入的。

      MIN的行为很奇怪,为数组中的非数字值发出0。改用SMALL,给不存在的引用提供#NUM! 错误。

      电子表格示例:http://www.bumpclub.ee/~jyri_r/Excel/MInimal_value_excluding_0.xls

      【讨论】:

      • AND 在这里不起作用,因为 AND 总是返回单个结果,而不是您在这类公式中需要的数组
      • @barryhoudini:你是对的。有时周五晚上不利于正确思考;)
      【解决方案4】:

      AFAIK:要么使用 VBA 循环遍历这些值,要么:

      使用类似于=IF(a1=0,"",A1) 的公式创建另一列(复制A 列中的每个值)。然后你可以在这个列上使用 min 函数。

      HTH

      【讨论】:

        猜你喜欢
        • 2014-11-04
        • 2020-05-21
        • 2013-05-10
        • 1970-01-01
        • 2020-08-25
        • 2015-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多