Excel公式查找第一个较高的值

时间:2018-11-08 09:36:36

标签: excel

在D列(结果)中,我想具有以下公式。

对于C列中的每个单元格,请在B列中找到比C列的单元格的值高的第一个值(从同一行开始),并给出在A列中找到的值之间的差(计数)作为输出

示例: C2中的值是40。B的第一个单元格的值大于40是B6。因此D2需要A6.value - A2.value = 5 - 1 = 4

可以在不使用VBA的情况下完成吗?

enter image description here

4 个答案:

答案 0 :(得分:4)

可以很容易地通过数组公式来完成(因此您必须使用 Ctrl + Shift + Enter 输入公式):< br /> {=MATCH(TRUE;IF(B2:$B$7>C2;TRUE;FALSE);0)-1}

将此公式放在单元格D2中,然后向下拖动。您只需更改数据集的末尾(将$ B $ 7更改为包含数据的列的最后一个单元格)

公式的工作原理如下:

  • IF语句将生成一个具有满足您的条件的TRUE / FALSE值的数组:{FALSE;FALSE;FALSE;FALSE;TRUE;FALSE}
  • MATCH(使用0开关)在数组中搜索第一个匹配项的索引,在本例中为 5
  • 您必须减去1才能获得放置函数的单元格的偏移量,因此,您得到 4

因此,尽管您必须将其作为数组公式输入(如果没有ctrl + shift + enter,将出现N/A错误),但结果只是一个数字。
另外,根据您的数据集,如果未找到匹配项,您可能需要添加一些错误处理,例如仅使用问题中的示例数据集,单元格D5中的结果将为N/A,因此您必须确定在这种情况下希望结果为什么值。
最后,我没有使用列A中的值,因为我认为这只是一个顺序的递增计数器。如果不是这种情况,并且您特别想查找该列中相应值之间的差异,则可以在其他答案之一中使用Foxfire ...提到的变体:=MIN(IF(B2:$B$6>C2;A2:$A$6))-A2

答案 1 :(得分:1)

对彼得·K(Peter K.)的建议进行了稍微调整和缩短的答案 在D2中:

^(=.*){2}.$

使用ctrl + shift + enter输入公式

答案 2 :(得分:0)

类似的事情应该对您有用。首先将您的范围转换为表格。

=IFERROR(AGGREGATE(15,6,--([@Second]<[First])*(ROW([@Second])<=ROW([First]))/--([@Second]<[First]*(ROW([@Second])<=ROW([First])))*[Count],1) - [@Count],"")

在此公式中,[second]和[First]之间的比较从同一行开始。这意味着D5中的值为0而不是1。(如注释中所述的@Foxfire And Burns And Burnslike)。

答案 3 :(得分:0)

好的,我没有等到OP回答D5是1而不是0的原因后才发布答案,但是我的公式也是数组公式。会是:

=MIN(IF(B2:$B$6>C2;A2:$A$6))-A2

要在数组模式下键入此公式,您需要像往常一样键入它,但是无需按 ENTER ,而是需要按 CTRL + SHIFT < / kbd> + ENTER