如何使偏移函数与max函数一起使用?

时间:2018-10-04 08:44:53

标签: excel excel-formula

非常感谢您抽出宝贵时间阅读本文章。

我有一个函数可以返回小于给定值的最接近值:

=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

非常感谢

3 个答案:

答案 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轻松实现所需的内容:enter image description here = 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