聚合函数(小)返回零而不是最小值

时间:2019-07-25 14:44:11

标签: excel excel-formula

我正在使用excel的聚合(小)函数来查找出现在列中的每个名称的最小值。问题在于,只要B中存在值,下面的公式就会简单地返回0。

我正在使用的公式是

=IF($B2<>"", AGGREGATE(15,7, ($B:$B)*($A2=$A:$A)*($B2<>""), 1), "")

其中B包含我要从中获取最小值的数据,而A包含标识字符串。

我感谢您可以提供的任何帮助!

enter image description here

1 个答案:

答案 0 :(得分:3)

您要按条件划分

=IF($B2<>"", AGGREGATE(15,7, ($B:$B)/(($A2=$A:$A)*($B:$B<>"")), 1), "")

每当($A2=$A:$A)($B2<>"")FALSE时,它将返回0,乘以0的任何值为0,因此是最小值是0

通过除以条件,我们抛出一个#DIV/0错误,该错误由AGGREGATE的第二个条件中的7强制公式忽略,因此,我们仅得到返回TRUE的最小值或两个布尔值中的11*1=1

还有一件事。 AGGREGATE是一个数组类型公式,因此将限制为仅数据将加快速度。

=IF($B2<>"", AGGREGATE(15,7, ($B$1:INDEX($B:$B,MATCH("zzz",$A:$A)))/(($A2=$A$1:INDEX($A:$A,MATCH("zzz",$A:$A)))*($B$1:INDEX($B:$B,MATCH("zzz",$A:$A))<>"")), 1), "")

根据您的评论:

=IF($B2 = AGGREGATE(15,7, ($B:$B)/(($A2=$A:$A)*($B:$B<>"")), 1),AGGREGATE(15,7, ($B:$B)/(($A2=$A:$A)*($B:$B<>"")), 1), "")