【问题标题】:How to average the last seven values in a column?如何平均一列中的最后七个值?
【发布时间】:2016-11-24 06:12:47
【问题描述】:

我正在尝试查找连续七个最近条目的平均值,如 this 电子表格。

我发现了一些与我类似的问题,但我仍然对答案的工作原理感到很困惑。与我类似的问题可以在我的电子表格的左侧找到。

我认为这些公式对我有用,只需对要使用的值进行一些简单的调整,但我似乎无法弄清楚。如果有人可以解释现有答案之一或提出另一个可行的答案,我将不胜感激。

电子表格每天都会更新,所以我需要一些能够随着越来越多的数据添加到列中而继续工作的东西。

【问题讨论】:

    标签: google-sheets google-sheets-formula moving-average


    【解决方案1】:

    试试:

    =round(AVERAGE(OFFSET(H1,MAX(ARRAYFORMULA(ROW(H:H)*--(H:H<>"")))-7,,7)))
    

    这里是working sample

    说明

    我们得到最后一个非空行:MAX(ARRAYFORMULA(ROW(H:H)*--(H:H&lt;&gt;"")))

    然后使用offset 公式,我们将获得一列中最后 7 个单元格的范围。

    然后只需使用AVERAGE

    更多信息

    您可以在此处找到有关查找最后一个非空行的更多信息: Selecting the last value of a column

    【讨论】:

    • 这绝对有效,但我不太明白如何。数组公式函数到底是什么,带有 和 --?
    • H:H"" 意思是“而不是空的”
    【解决方案2】:

    另一种方法是使用 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"))
    

    【讨论】:

    • 感谢您的回复;但是,我可能会使用 Max 的答案。我看到你也使用了数组公式函数,你能解释一下它的作用吗?
    • A 会在我的答案中添加对第二个公式的解释(第一个不是数组公式)
    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    相关资源
    最近更新 更多