我正在使用excel的聚合(小)函数来查找出现在列中的每个名称的最小值。问题在于,只要B中存在值,下面的公式就会简单地返回0。
我正在使用的公式是
=IF($B2<>"", AGGREGATE(15,7, ($B:$B)*($A2=$A:$A)*($B2<>""), 1), "")
其中B包含我要从中获取最小值的数据,而A包含标识字符串。
我感谢您可以提供的任何帮助!
答案 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
的最小值或两个布尔值中的1
。 1*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), "")