使用带有过滤条件的Excel SMALL函数并忽略零

时间:2018-04-23 03:22:49

标签: excel formulas

我有多个母产品的变体(不同大小,颜色)的产品价格清单。有些产品(对于这个问题不重要的原因)的价格为零。

我正在尝试编写一个excel公式,它将返回每个非零产品的最低价格

我到目前为止:

= IF(SUMIFS(I:I,A:A,A3)= 0,0,IF(AND(SUMIFS(I:I,A:A,A3)大于0,MINIFS(I:I,A :A,A3)大于0),MINIFS(I:I,A:A,A3),SMALL(IF(A:A = A3,I:I)中,2)))

我在哪里:我是价格列,A:A是父参考栏

这适用于所有情况,除非我有多个父产品的变体具有零值。

我需要SMALL或MINIF函数中的变量: A.仅包括计算中单个父产品的值 B.在计算最低值

时忽略任何零

任何帮助都将不胜感激。

4 个答案:

答案 0 :(得分:2)

您可以使用数据透视表轻松创建动态最小值列表。默认情况下会忽略空白单元格,并且可以通过几种方式排除零(或您想要的任何其他数字);我认为最简单的方法是使用数据透视表的过滤器功能。

他们说一张图片胜过千言万语,所以动画GIF必须价值一百万...... :)

img

更多信息:

答案 1 :(得分:1)

如果输入数据是根据父参考级别排序的,您可以简单地

  • 使用offset查找包含价格所需的父参考单元格
  • 使用SMALL公式(即最小值)
  • 找到第k个最小值
  • 如果最小值为0
  • ,则设置if条件以获得第二个最小值

将其放在第1行

=IF(SMALL(OFFSET($I$1,MATCH(C1,$C:$C,0)-1,0,COUNTIF($C:$C,C1)),1)=0,SMALL(OFFSET($I$1,MATCH(C1,$C:$C,0)-1,0,COUNTIF($C:$C,C1)),2),SMALL(OFFSET($I$1,MATCH(C1,$C:$C,0)-1,0,COUNTIF($C:$C,C1)),1))

答案 2 :(得分:0)

您可以使用传统的'数据透视表可以做到这一点。见ashleedawg的好答案。

您还可以使用' OLAP' PivotTable基于称为数据模型的东西来实现它,它比传统的数据模型具有一个小优势。数据透视表,您不需要在刷新后清除PageFilter。 (在我的答案的底部更多关于这一点)。

Excel 2013中的任何Excel版本都会默认内置DataModel,如果您安装Microsoft的免费PowerPivot加载项,您还可以在2010年访问DataModel。使用DataModel,您需要做什么:

使用 Ctrl + T 键盘快捷键将数据转换为Excel表格:

enter image description here

从中创建一个数据透视表,但一定要检查将此数据添加到数据模型选项:

enter image description here

将“组”添加到数据透视表的“行”窗格,然后在字段窗格中右键单击“表1”并选择添加度量...

enter image description here

为新测量指定一个名称(我将其命名为Min Without Zero)并在公式框中键入=CALCULATE(MIN(Table1[Price]),Table1[Price]>0),然后按OK:

enter image description here

在数据透视表字段列表中勾选Min Min Zero复选框。

enter image description here

秉!数据透视表按价格显示每组的最小值(不包括零)。

编辑:如果我自己这样做,我可能会使用ashleedawg的回答。但有一点需要注意:如果您将来添加其他数据并刷新,则需要清除过滤器并重新应用零排除,以确保包含数据中的任何新数字。通过演示,如果我从PageField中过滤掉零,那么我只得到我期望的结果:

enter image description here

...以及过滤器的外观如下:

enter image description here

但是如果我添加新数据并刷新,请注意数据透视表中没有任何变化:

enter image description here

......如果我看过滤器,我可以看到原因:

enter image description here

那是因为当您从过滤器中取消选择某些内容时,您实际上并没有说过#34;除了这件事情之外,还给我一切"而是#34;在此列表中显示其他目前目前的内容,但不要选择任何新内容。"

很容易修复:只需清除过滤器并再次取消选择零(或者写一些VBA代码以便在刷新时自动执行)。

答案 3 :(得分:0)

如果你想要一个公式方法,你可以使用IF语句返回一个值,如果该值超过零,否则返回FALSE,因为像MIN这样的函数方便地忽略FALSE。

根据我的其他答案,我建议您首先使用 Ctrl + T 键盘快捷键将数据转换为Excel表格,如下所示。然后在摘要表中,您可以在E2中使用以下数组输入的公式:

=MIN(IF(Table1[Price]>0,IF(Table1[Group]=D2,Table1[Price])))

(数组输入意味着您按 Ctrl + SHIFT + ENTER 而不是像往常一样按 ENTER 做)

结果如下:

enter image description here