
概括
要计算一组数据中最后n列的平均值,可以使用TAKE 函数 和AVERAGE 函数。在所示示例中,K5 单元格中的公式为:
=AVERAGE(TAKE(data,,-J5))
其中,数据区域为C5:H16,n作为变量输入到 J5 单元格中。结果为 8.42,即 F5:H16 区域中值的平均值。
注:(1) TAKE 函数是 Excel 中的新增函数。请参阅下文,了解适用于旧版本的其他方法。(2) 示例中计算的是 12 行数据的平均值,但该公式同样适用于单行数据。
通用公式
=AVERAGE(TAKE(data,,-n))
解释
在这个例子中,目标是计算一组数据中最后n列的平均值,其中n是一个变量,输入在单元格 K5 中,可以随时更改。由于可能会添加更多数据,因此关键要求是按位置计算平均值。 为方便起见,待求平均值的值位于名为 “数据”的区域(C5:H16) 中。在最新版本的 Excel 中,解决此问题的最佳方法是使用TAKE 函数,这是一个 Excel 中的新动态数组函数 。在旧版 Excel中,您可以使用OFFSET 函数 或INDEX 函数。下面将解释这三种方法。
执行功能
TAKE 函数返回给定数组或范围的子集。返回数组的大小由单独的行和列 参数决定:
=TAKE(array,rows,columns)
当为行或列提供正数时,TAKE 函数从数组的开头返回值:
=TAKE(array,3) // get first 3 rows
=TAKE(array,,3) // get first 3 columns
当提供负数时, TAKE 函数会从数组末尾返回值:
=TAKE(array,-3) // get last 3 rows
=TAKE(array,,-3) // get last 3 columns
在所示工作表中,数据位于名为 C5:H16 的区域。我们可以按如下方式提取最后 3 列:
=TAKE(data,,-3) // last 3 columns
注意,这里我们只是省略了行,因为我们需要数据中的所有行。 为了使列数可变,我们只需替换对 J5 的引用并添加一个负号:
=TAKE(data,,-J5)
最后,为了对 TAKE 函数的结果取平均值,我们 将TAKE 函数嵌套在AVERAGE 函数中:
=AVERAGE(TAKE(data,,-J5))
在单元格 J5 中输入 3 后,TAKE 函数返回数据中的最后 3 列。该结果传递给 AVERAGE 函数,AVERAGE 函数返回最终结果 8.42,即 F5:H16 范围内值的平均值。
偏移功能
在旧版本的 Excel 中,解决此问题的另一种方法是使用OFFSET 函数。OFFSET 函数返回一个由五个输入参数构成的区域的引用:(1) 起始点,(2) 行偏移量,(3) 列偏移量,(4) 行高,(5) 列宽。要计算指定区域数据中最后 3 列的平均值,我们可以像这样使用 OFFSET 函数:
=AVERAGE(OFFSET(data,0,COLUMNS(data)-J5,,J5))
在 OFFSET 函数内部,我们为参考数据提供数据,并将行数设置为 0 ,因为我们不需要任何行偏移。接下来,我们使用COLUMNS 函数计算数据中的列数,并从中减去单元格 J5 中n的值,得到列偏移量cols。我们将高度留空,因为 OFFSET 会自动继承参考数据的高度,并将宽度设置为 J5 ,因为我们最终想要一个 3 列的范围。在这种配置下,OFFSET 函数会返回一个从单元格 F5 开始的 3 列范围,该范围 包含数据中的所有 12 行。
注意:OFFSET 函数是一个易失性函数,在处理较大或较复杂的工作表时可能会导致性能问题。如果遇到此问题,请参阅下面的 INDEX 函数解决方案。
索引函数
解决此问题的另一种方法是在公式中使用功能强大的INDEX 函数,如下所示:
=AVERAGE(INDEX(data,0,COLUMNS(data)-(J5-1)):INDEX(data,0,COLUMNS(data)))
理解这个公式的关键在于认识到 INDEX 函数可以返回对整行和整列的引用。要生成对表中“最后 n 列”的引用,我们需要将引用分为两部分:左列和右列,然后使用范围运算符(:) 将这两部分连接起来:
=AVERAGE(left:right)
要获取左侧栏的引用,我们使用:
INDEX(data,0,COLUMNS(data)-(J5-1))
由于数据包含 6 列,因此 COLUMNS 函数返回 6,简化后为:
INDEX(data,0,4) // column 4
INDEX 函数返回对第 4 列(F5:F16)的引用。对于 该范围内的右侧列,我们使用 INDEX 函数的方式如下:
INDEX(data,0,COLUMNS(data))
由于 COLUMNS 返回 6,因此可简化为:
INDEX(data,0,6) // column 6
INDEX 函数返回对第 6 列(H5:H16)的引用。两个 INDEX 函数共同返回对数据中第 4 列到第 6 列(即 F5:H16)的引用。范围运算符(:) 将这两个引用连接起来,AVERAGE 函数返回最终结果 8.42。










