如何平均一列中的最后七个值?
How to average the last seven values in a column?
我正在尝试查找连续七个最近条目的平均值,如中所示
this
电子表格。
我发现了一些与我的问题类似的问题,但我仍然对答案的工作原理感到很困惑。与我类似的问题可以在电子表格的左侧找到。
我认为只要对要使用的值进行一些简单的调整,这些公式就可以为我工作,但我似乎无法弄清楚。如果有人可以解释现有答案之一或提出另一个可行的答案,我将不胜感激。
电子表格每天更新,所以我需要一些东西,随着越来越多的数据被添加到列中,它可以继续工作。
尝试:
=round(AVERAGE(OFFSET(H1,MAX(ARRAYFORMULA(ROW(H:H)*--(H:H<>"")))-7,,7)))
说明
我们正在获取最后一个非空行:MAX(ARRAYFORMULA(ROW(H:H)*--(H:H<>"")))
然后使用 offset
公式,我们得到一列中最后 7 个单元格的范围。
然后只需使用 AVERAGE
.
更多信息
您可以在此处找到有关查找最后一个非空行的更多信息:
Selecting the last value of a column
另一种方法是使用 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,该解决方案应该适用于您。我已经根据最后十个单元格的平均值对其进行了测试,其中包括一个 "Nothing" 单元格:
=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"))
我正在尝试查找连续七个最近条目的平均值,如中所示 this 电子表格。
我发现了一些与我的问题类似的问题,但我仍然对答案的工作原理感到很困惑。与我类似的问题可以在电子表格的左侧找到。
我认为只要对要使用的值进行一些简单的调整,这些公式就可以为我工作,但我似乎无法弄清楚。如果有人可以解释现有答案之一或提出另一个可行的答案,我将不胜感激。
电子表格每天更新,所以我需要一些东西,随着越来越多的数据被添加到列中,它可以继续工作。
尝试:
=round(AVERAGE(OFFSET(H1,MAX(ARRAYFORMULA(ROW(H:H)*--(H:H<>"")))-7,,7)))
说明
我们正在获取最后一个非空行:MAX(ARRAYFORMULA(ROW(H:H)*--(H:H<>"")))
然后使用 offset
公式,我们得到一列中最后 7 个单元格的范围。
然后只需使用 AVERAGE
.
更多信息
您可以在此处找到有关查找最后一个非空行的更多信息: Selecting the last value of a column
另一种方法是使用 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,该解决方案应该适用于您。我已经根据最后十个单元格的平均值对其进行了测试,其中包括一个 "Nothing" 单元格:
=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"))