另一种方法是使用 INDEX 和 MATCH。第一个匹配找到范围内最后一个数字的位置并从中取 6:第二个匹配找到范围内最后一个数字的位置。通过 INDEX 函数传递它会提供一个参考,您可以使用该参考为 AVERAGE 提供 7 个单元格的范围。
=average(index(H:H,match(999,H:H)-6):index(H:H,match(999,H:H)))
所以我的回答就像你的Link2
这里的大问题是,如果您在该范围内有一个文本单元格(例如“Nothing”),则要确定从哪个单元格开始平均获得 7 个单元格会更加困难。我想我知道如何在 Excel 中使用 OFFSET 来做到这一点,但在 Google Sheets 中,offset 的工作方式似乎不同。
但是,我可以在您的 Link3 中看到解决方案,如果您将 A:A 更改为 H:H 并将 SUM 更改为 AVERAGE,它应该对您有用。我已经对最后十个单元格的平均值进行了测试,其中包括一个“无”单元格:
=ArrayFormula(AVERAGE(QUERY(SORT(H:H,ROW(H:H)*ISNUMBER(H:H),0),"select * limit 10")))
它给出了正确答案 61.8。
数组公式的一般工作方式是,不是将单个值传递给函数,而是传递整个范围或数组(值列表),然后函数会逐个处理它们。上面的公式取整列 H:H 并按行号按降序对其进行排序,但那些不包含数字的单元格在乘法中给出零并排序到底部。然后查询获取顶部(在我的情况下)10 个单元格并将它们传递给 AVERAGE。
顺便说一句,这不必声明为数组公式:这也有效
=AVERAGE(QUERY(SORT(H:H,ROW(H:H)*ISNUMBER(H:H),0),"select * limit 10"))