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

Using the Excel SMALL function with filtering criteria AND ignoring zeros

我有一个产品价格列表,这些产品是多个父产品的变体(不同尺寸、颜色)。一些产品(出于对这个问题不重要的原因)的价格为零。

我正在尝试编写一个 excel 公式,该公式将 return 每个不为零的父产品的最低价格

我已经做到了:

=IF(SUMIFS(I:I,A:A,A3)=0,0,IF(AND(SUMIFS(I:I,A:A,A3)> 0,迷你(I:I,A:A,A3)>0),迷你(I:I,A:A,A3),小(如果(A:A=A3 ,I:I),2)))

其中 I:I 是价格列,A:A 是父引用列

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

我需要 SMALL 或 MINIF 函数中的变量,它们将: A. 仅在计算中包含单个父产品的值 B. 在计算最低值时忽略任何零

如有任何帮助,我们将不胜感激。

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

  • 使用偏移量查找包含价格的所需父参考单元格
  • 使用SMALL公式求第k小值(即最小值)
  • 放置一个 if 条件,如果最小值是 0,则给出第二个最小值

把这个放在第一行

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

您可以使用 'traditional' 枢轴Table 来执行此操作。请参阅 ashleedawg 的出色回答。

您还可以使用基于称为数据模型的东西的 'OLAP' 数据透视表Table 来执行此操作,它比 'traditional' 数据透视表[=94= 有一点优势] 因为您不需要在刷新后清除 PageFilter。 (更多信息在我的答案底部)。

Excel 2013 之后的任何 Excel 版本都默认内置了 DataModel,如果您安装 Microsoft 的免费 PowerPivot 加载项,您也可以在 2010 年访问 DataModel。使用 DataModel,您需要执行以下操作:

使用 Ctrl + T 键盘快捷键将您的数据转换为 Excel Table:

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

将组添加到数据透视表的“行”窗格Table,然后右键单击字段窗格中的 Table1 并 select 添加度量.. .:

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

在数据透视表Table 字段列表中勾选不带零的最小值复选框。

Bing! PivotTable 按价格显示每个组的最小值(不包括零)。

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

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

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

...如果我查看过滤器,我就会明白为什么:

那是因为当你从过滤器中去除select某些东西时,你实际上并不是在说"Give me everything except this thing"而是"Give me the other things currently visible in this list, but leave any new things unselected."

很容易修复:只需清除过滤器并再次将 select 归零(或编写一些 VBA 代码以在刷新时自动执行此操作)。

如果您想要公式方法,您可以使用 IF 语句 return 一个值(如果该值大于零),否则 return FALSE,因为像 MIN 这样的函数可以方便地忽略 FALSE。

根据我的其他回答,我建议您首先使用 Ctrl + T[ 将数据转换为 Excel Table =30=]快捷键,如下图。然后在汇总中 table 您可以在 E2 中使用以下数组输入公式:

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

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

结果如下:

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

他们说一张图片值一千个字,所以动画 GIF 必须值一百万...:)


更多信息: