excel中的递归查找

时间:2014-06-16 11:01:19

标签: excel recursion average vlookup

我正在尝试在Excel中进行一些数据验证,但难以递归地使vlookup工作。 这是一小部分数据

+---------------+-----------------+
| Duration(sec) | Start time(sec) |
+---------------+-----------------+
| 1.428571429   | 96.57142857     |
| 1.888888889   | 95              |
| 1.888888889   | 96.22222222     |
| 2.428571429   | 95.71428571     |
| 2.75          | 96              |
| 2.8           | 95.3            |
| 2.846153846   | 94.30769231     |
| 2.857142857   | 97.42857143     |
| 3             | 94.8            |
| 3             | 97              |
| 3             | 99              |
| 3.111111111   | 95.66666667     |
| 3.2           | 95.5            |
| 3.333333333   | 96.22222222     |
| 3.416666667   | 80.33333333     |
| 3.416666667   | 94.16666667     |
| 3.5           | 94.1            |
| 3.615384615   | 78.92307692     |
+---------------+-----------------+

第一列是事件的持续时间,第二列是起点。我需要找到例如的平均起始点。持续时间最短的5件商品。

我开始是这样的:{=AVERAGE(SMALL(IF(ISNUMBER(B:B),B:B,""),ROW(INDIRECT("1:5"))))}给了我5个最小持续时间的平均值。到现在为止还挺好。它的工作原理应该如此。

然后尝试将上述内容与vlookup混合,以便在第一步中返回5个最小的持续时间,然后查找相应的起点,然后计算它们的平均值。 我试过了:{=AVERAGE(VLOOKUP(SMALL(IF(ISNUMBER(B:B),B:B,""),ROW(INDIRECT("1:5"))),B:C,2,FALSE))} 但没有运气。 VLOOKUP似乎只返回一个值。所以我不能这样使用它。 有什么想法吗?

P.S。我使用ISNUMBER因为我在数据中有NaN值。

1 个答案:

答案 0 :(得分:1)

试试这个:

{=SUMPRODUCT(IF(DurNoErrors<=SMALL(DurNoErrors,5),TRUE,FALSE)*Start_Time)/5}

重要提示:请注意,这是一个数组公式,因此必须使用Ctl + Shift + Enter输入。该公式也可作为非数组论坛使用,但如果正常输入,它将无法提供您期望的结果!因此,请确保将其作为数组公式输入。

DurNoErrors是一个命名范围,设置为:

=IFERROR(Duration," ")

Duration是设置为持续时间数据的命名范围。

Start_Time是设置为开始时间数据的另一个命名范围。

此数组公式的工作原理如下:

  1. 查找第5个最小持续时间值
  2. 使用IF()根据每个值是否大于(FALSE)或小于/等于(TRUE)第5个最小值,从Duration数组创建一个TRUE / FALSE值数组(结果数组将包含5个TRUE,其余的将为FALSE)
  3. 将TRUE / FALSE数组乘以Start_Time数组,因此所有持续时间大于第5个最小值的Start_Times现已归零
  4. 使用SUMPRODUCT()添加该数组,并将结果除以5
  5. 使用IFERROR()可以消除数组中的任何错误。

    注意:对于您的命名范围,您不应使用,例如A:A。而是使用A1:A100之类的内容,因为通常情况下,在公式中使用A:A显着减慢工作表的速度。如果您愿意,您当然可以直接在上面的公式中输入数据的地址,而不是使用命名范围(例如:A1:A18而不是Duration)。但是,named ranges are a good way to make your formulas more understandable when you come back a year later and are trying to figure out what the heck it is you were doing