我在excel中有一个简单的数组公式,它不像我希望的那样工作。在A列和B列中有数据(A1与B1配对,依此类推),而在F列中有基于E列中参数的计算。
在单元格F1中,公式为:
{=SUM(MAX(A$1:A$9, E1)*B$1:B$9)}
这个公式的作用是:
=MAX(A$1:A$9, E1)*B$1 + MAX(A$1:A$9, E1)*B$2 + ...
相反,我需要一个公式来做到这一点:
=MAX(A$1, E1)*B$1 + MAX(A$2, E1)*B$2 + ...
换句话说,我写的公式(第一个)总是找到从A1到A9的值和E1之间的最大值,将其乘以第i个B值并将结果求和。我需要的是一个公式,它找到第i个A值和E1之间的最大值,而不是所有A值之间的最大值。
我所寻找的是很容易通过在列C中添加公式=MAX(A1;E$1)*B1,然后在F1中只是=SUM(A1:A9),但我不能使用这个解决方案,因为在F列中重复了相同的公式,每次E参数都在变化。
我可以使用IF指令:在F1我可以写
{=SUM(IF(A$1:A$9>E1, A$1:A$9, E1)*B$1:B$9)}
虽然这个公式在这种情况下满足了我的需要,但我认为这是一个糟糕的解决方案,因为我发现它很难阅读和扩展。E1);D1),使用IF将导致非常长且非常不可读和复杂的公式。
有更好的解决方案吗?谢谢大家!
注意:语法可能会有一点不同,因为我使用的是意大利语版本的excel。
6条答案
按热度按时间hgc7kmma1#
问题是MAX接受一个数组作为参数。通常接受数组的函数永远不会返回数组-它们被设计为将数组转换为一个数字。无论你向MAX抛出多少个数组,它总是只返回一个数字。
我想不出一个好的解决办法,所以这里有一个坏的
我不认为这真的增加了您试图避免的基于IF的公式的可维护性。
dbf7pr2w2#
另一种可能性是VBA函数。
为了你的榜样
添加其他条件
如果区域的单元格数不相同,或者传递的参数不适用于
Evaluate
,则会出错。qeeaahzv3#
避免重复单元格引用的另一种可能性是:
假设值是非负的。更一般地,返回成对最大值的数组:
其返回:
ewm0tg9j4#
我不记得曾经破解过这个问题,但为了可维护性,我可能会这样做:
z9ju0rcb5#
如果我正确理解了这个问题,使用IF而不是MAX应该做到:
=SUM(IF($A$1:$A$9>E1;$A$1:$A$9;E1)*$B$1:$B$9)
6yjfywim6#
已经有很多很好的答案了,但是下面的公式与原始问题中的公式只相差一个字符。
将AMAX定义为LAMBDA函数:
你可以在单元格F1中输入: