非常感谢您抽出宝贵时间阅读本文章。
我有一个函数可以返回小于给定值的最接近值:
=MAX(IF(O80:O85<Y80,O80:O85))
这很好用,我现在想将其乘以找到的值右边的值,所以我尝试使用偏移函数:
=MAX(IF(O80:O85<Y80,O80:O85))*(1+OFFSET(MAX(IF(O80:O85<Y80,O80:O85)),0,1))
但这不起作用。我用另一个函数做了类似的事情,并且偏移量完美地工作了有人知道为什么不是这种情况吗? 我正在使用Ctrl + Shift + Enter
非常感谢
答案 0 :(得分:1)
IMO,如果您没有带有新MAXIFS的Office 365,则最好的伪MAXIFS是AGGREGATE作为标准非数组公式。
=aggregate(14, 7, O80:O85/(O80:O85<Y80), 1)
将结果乘以P80:P85中的匹配值。
=aggregate(14, 7, O80:O85/(O80:O85<Y80), 1)*index(P80:P85, match(aggregate(14, 7, O80:O85/(O80:O85<Y80), 1), O80:O85, 0))
答案 1 :(得分:1)
您可以使用INDEX-MATCH轻松实现所需的内容:
= INDEX(您的数据在哪里,MATCH(目标是什么,您的数据在哪里,少于选择))
在您的情况下:
=INDEX(O80:O85,MATCH(Y80,O80:O85,1))
按升序对数据进行分类很重要,因为该公式将通过一个接一个地检查数据来给出最接近的值,然后停止而不进一步检查最接近的值。
对于第二部分,如果您需要乘以所选值右侧的值的偏移量,则只需执行以下操作:
=INDEX(O80:O85,MATCH(Y80,O80:O85,1))*OFFSET(INDEX(O80:O85,MATCH(Y80,O80:O85,1)),0,1)
答案 2 :(得分:1)
offset函数首先需要一个引用,但是max函数仅提供一个值。 这将是基于您的第一个功能的解决方案
>> P = sprand(10485, 52420, 1e-3);
>> I = sprand(10485, 52420, 1e-3);
>> tic, disp(sum(sum(P<=I))); toc
(1,1) 549074582
Elapsed time is 3.529121 seconds.
>> tic, disp(nnz(P<=I)); toc
549074582
Elapsed time is 3.538129 seconds.
>> tic, disp(nnz(P<=I)); toc
549074582
Elapsed time is 3.499927 seconds.
>> tic, disp(numel(P) - nnz(P>I)); toc
549074582
Elapsed time is 0.010624 seconds.
ARRAY公式:CTRL + SHIFT + ENTER