Answers:
这是一种方法:
=average(indirect("D" & iferror(large(filter(row(D7:D), len(D7:D)), 7), row(D7)) & ":D"))
说明:
filter(row(D7:D), len(D7:D))
返回一个数组,该数组由给定范围内的非空条目的行号组成。large(..., 7)
从此数组中选择第7大数字:这是您要开始求平均的行号。iferror(..., row(D7))
如果您的范围内的非空白条目少于7个,这是一种保护措施:在这种情况下,平均将从D7开始。我本来可以用“ 7”代替row(D7)
,但是row(D7)
可以使公式更易于移植,以防万一您决定将其复制到其他地方。indirect("D" & ... & ":D")
形成平均范围,例如,D9:D
如果先前计算的输出为9。average
求平均值。您也可以在此处放置其他聚合函数。=AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))
=COUNT(A:A)
。包含文本的单元格将不计算在内。我们的例子可以给我们9
=COUNT(A:A)-7
。这会给我们一个2
。现在,我们使用offset函数获取一个完整列的范围,但具有2个像元的偏移量,这实际上意味着我们只剩下一列的一部分,仅剩下7个值
想象一下在第一个具有值的单元格之前没有空白单元格的列。然后是一个简化的示例=OFFSET(A:A; COUNT(A:A)-7 ;0)
。但这无法在列以空白单元格开始时立即起作用,如上图所示
现在,我们需要通过空白单元格的数量来扩展偏移量。这并不意味着我们连续计算所有空白值。就在第一个非空单元格之前的那些。
您可以用它们来计数=MATCH(TRUE;INDEX(A:A<>0);0)-1
并得到6
结果或我们的示例
现在我们修改偏移函数并添加此计数以获得仅包含7个值的正确范围
OFFSET(A:A; COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1 ;0)
作为最后一步,我们计算该范围的平均值。我们的示例将给我们4作为结果,因为1,2,3,4,5,6,7的平均值为4。
=AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))
另一种方式:
=AVERAGE(ARRAY_CONSTRAIN(SORT(FILTER(A:A, ISNUMBER(A:A)), 1, 1), 7, 1))
外植体:
编辑:抱歉造成误会。上面的平均值是一列中LARGEST 7值的平均值,而不是最后7个值。要取最后7个值的平均值,正常人的解决方案很棒。函数较少的另一种方法是使用QUERY()
假设A列中的数字数据,请尝试:
=AVERAGE(QUERY(ARRAYFORMULA({ROW(A:A),A:A}),"select Col2 where Col2 is not null order by Col1 desc limit 7", 0))