Google表格中最近7个非空非空白单元格的平均值


Answers:


6

这是一种方法:

=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求平均值。您也可以在此处放置其他聚合函数。

工程和新变化的更新!
海绵宝宝

谢谢,但是现在我认为JPV的答案应该是公认的答案:它更简单,更语义自然。

它对我来说没有正确更新,我以为它也更容易,但是一旦我添加了更多数字,它就不起作用了。
海绵宝宝2015年

6

TL; DR

=AVERAGE(OFFSET(A:A;COUNT(A:A)-7 + MATCH(TRUE;INDEX(A:A<>0);0)-1;0))

在此处输入图片说明

说明

  • 首先,我们用计数A行中的数字=COUNT(A:A)。包含文本的单元格将不计算在内。我们的例子可以给我们9
  • 从此数字中减去7,因为您需要最后7个值的平均值:=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))


出色的答案。
ale

它工作正常,但是一旦添加了另一个单元,它是否无法正确更新?
海绵宝宝

2

另一种方式:

=AVERAGE(ARRAY_CONSTRAIN(SORT(FILTER(A:A, ISNUMBER(A:A)), 1, 1), 7, 1))

外植体:

  1. 过滤掉所有数值
  2. 通过使用sort()将列上下颠倒(以便最后一个值在上面)
  3. 将该列的输出限制为7行(使用ARRAY_CONSTRAIN)
  4. 以平均...

编辑:抱歉造成误会。上面的平均值是一列中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))

0

=AVERAGE(IFERROR(QUERY(D7:D, 
 "where D is not null 
  offset "&COUNTA(QUERY(D7:D, "where D is not null", 0)) - 7, 0)))

0

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.