【发布时间】:2015-01-30 20:34:33
【问题描述】:
寻找基于两组标准的列中的最大值
所以逻辑是:在M列中找到最小值,其中A列中的值与N列匹配,并且Y列中的值小于318。
我尝试过使用这样的数组公式,但它似乎不起作用/运行起来内存很重: =MIN(IF(AND(N:N=A2,Y:Y
有没有更简单的方法?或者可能是一个可以工作的 UDF?
感谢您的帮助!
【问题讨论】:
寻找基于两组标准的列中的最大值
所以逻辑是:在M列中找到最小值,其中A列中的值与N列匹配,并且Y列中的值小于318。
我尝试过使用这样的数组公式,但它似乎不起作用/运行起来内存很重: =MIN(IF(AND(N:N=A2,Y:Y
有没有更简单的方法?或者可能是一个可以工作的 UDF?
感谢您的帮助!
【问题讨论】:
您不能在这些类型的公式中使用AND,因为它只返回一个值而不是所需的数组。
以下是三个可能的工作版本:
1.) 使用*模拟AND
=MIN(IF((N:N=A2)*(Y:Y<=318),M:M))
用 CTRL+SHIFT+ENTER
确认2.) 使用多个嵌套的 IF
=MIN(IF(N:N=A2,IF(Y:Y<=318,M:M)))
用 CTRL+SHIFT+ENTER
确认3.) 使用AGGREGATE 函数
=AGGREGATE(15,6,M:M/(N:N=A2)/(Y:Y<=318),1)
这种方式的优点是不需要“数组输入”,可以忽略数据中的任何错误
无论哪种方式,如果可以的话,最好减小范围大小,因为整列可能会很慢
【讨论】:
M:M/(N:N=A2)/(Y:Y<=318) 部分创建一个返回错误或数字的数组(仅在满足您的条件时)
试试这个并调整范围以适应。尽量不要使用整列引用:
=SMALL(INDEX(($N$2:$N$101=A2)*($Y$2:$Y$101<=318)*$M$2:$M$101,),1+ROWS($M$2:$M$101)-COUNTIFS($N$2:$N$101,A2,$Y$2:$Y$101,"<=318"))
如果您在添加新数据时使用整个列来获取新数据,请考虑改用Dynamic Named Ranges
【讨论】:
当事情变得如此复杂时,我通常会将其分解并在单独的列中设置更小/更简单的公式。
换句话说,您在 A 到 Y 列中有数据?
所以让我们在 AA 列中创建一个公式: 1) 识别 Col A 中的值何时与 col N 匹配,并且 col Y 中的值
=and(A1=N1,Y1<318)
2) 将 AA1 复制到数据的所有行。
3) 现在我们有一个条件可以解决了.. 因为有一个 SUMIF 和 COUNTIF,但没有 MINIF.. 我们必须自己构建它。首先是如果: 在 AB1 列中:
=if(AA1,M1,"")
将其复制到您的所有数据中。
最后,尽你所能:
=MIN(AB:AB)
应该给你答案。
您可能可以将前两个拼接在一起,但同样,构建一个像这样的复杂公式,首先简单地构建它,;)
【讨论】: