Google Sheets滑动窗口自动递增范围的纯公式实现问询
实现Google Sheets滚动窗口平均值的公式方案
假设你将窗口大小(比如示例中的10)输入到单元格C1,可以通过以下两种公式实现需求:
方法1:下拉填充式公式(适合手动控制范围)
在目标起始单元格(比如B10)输入以下公式,然后下拉填充到数据末尾:
=AVERAGE(OFFSET(A$1, ROW()-ROW(B$10), 0, $C$1, 1))
公式说明:
OFFSET(A$1, 偏移行数, 0, 窗口大小, 1):以A1为基准点,根据当前行计算偏移量,生成对应窗口范围ROW()-ROW(B$10):计算当前行与起始行的差值,确保窗口随行号下移时同步偏移(B10时偏移0行,B11时偏移1行,以此类推)$C$1:固定引用窗口大小,修改C1的值可直接调整窗口长度
如果想避免OFFSET的易失性(部分场景下可能影响性能),可以改用INDEX函数:
=AVERAGE(INDEX(A:A, ROW()-ROW(B$10)+1):INDEX(A:A, ROW()))
方法2:数组公式(自动生成所有结果)
如果希望一次性生成所有符合条件的平均值,无需下拉填充,可在B列起始位置输入以下数组公式:
=ARRAYFORMULA(IF(ROW(A:A)>=C1, AVERAGE(OFFSET(A:A, ROW(A:A)-C1, 0, C1)), ""))
公式说明:
ARRAYFORMULA:批量计算B列所有行的值IF(ROW(A:A)>=C1, ...):仅当行号大于等于窗口大小时才计算平均值,避免无效行出现错误OFFSET(A:A, ROW(A:A)-C1, 0, C1):自动为每个符合条件的行生成对应的滚动窗口范围
操作步骤
- 在
C1单元格输入窗口大小(比如10) - 选择目标起始单元格(比如B10),输入上述任意一种公式
- 若用方法1,下拉填充到数据末尾;若用方法2,公式会自动填充所有符合条件的行
内容的提问来源于stack exchange,提问作者linearalgebraz
相关产品推荐
相关产品推荐

