在excel中进行recursion查找

我想在Excel中做一些数据validation,但有一个困难,使vlookup工作recursion。 这是一个小样本的数据

 +---------------+-----------------+ | 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 | +---------------+-----------------+ 

第一列是一个事件的持续时间,第二个是起点。 我需要find例如持续时间最小的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似乎只返回一个值。 所以我不能像这样使用它。 有任何想法吗?

PS我使用ISNUMBER因为我在数据中有NaN值。

尝试这个:

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

重要提示:请注意,这是一个数组公式,因此必须用Ctl + Shift + Enterinput。 该公式也适用于非数组论坛,但是如果input正常,它不会给你预期的结果! 所以只要确保你input数组公式。

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

=IFERROR(Duration," ")

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

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

此数组公式的工作原理是:

  1. find第五个最小持续时间值
  2. 使用IF()根据每个值是否大于(FALSE)或小于/等于(TRUE),从Duration数组创build一个TRUE / FALSE值的数组,第五个最小值(结果数组将包含5 TRUE,其余的将是FALSE)
  3. 将TRUE / FALSE数组乘以Start_Time数组,所有具有大于第五个最小值的Duration的Start_Times现在被清零
  4. 使用SUMPRODUCT()添加该数组,然后将结果除以5

使用IFERROR()可以消除数组中的任何错误。

注意:对于您的命名范围,您不应使用例如A:A 。 而是使用类似A1:A100东西,因为通常情况下,在公式中使用A:A显着减慢工作表的速度。 如果您愿意,您当然可以直接在上面的公式中input数据的地址,而不是使用已命名的范围(例如: A1:A18而不是Duration )。 不过, 命名范围是让你的公式更容易理解的好方法,当你回来一年后,并试图弄清楚你到底在做什么 。