跳转至

OFFSET 函数

一、函数概述

OFFSET 是 Excel 中非常灵活的“引用偏移”函数:它会以某个起始单元格/区域为基准,按指定的行数、列数进行移动(偏移),并返回偏移后的单元格引用或区域引用。 由于返回的是“引用”,OFFSET 常用于构建动态区域、配合汇总函数(如 SUM/AVERAGE)、制作动态报表区间、动态命名范围等。

常见使用场景包括:

  • 从某个基准单元格出发,取“向下第 N 行、向右第 M 列”的值
  • 生成“随数据量增长而自动扩展”的动态求和/平均区域
  • 搭配数据验证、图表数据源、动态报表(注意:不同场景对动态引用的要求不同)

二、基础语法

OFFSET(reference, rows, cols, [height], [width])

返回值:

  • 一个引用(可能是单个单元格,也可能是一个区域)。
  • 当它被放在需要“值”的位置时(例如单元格直接写公式),Excel 会显示该引用区域左上角单元格的值;
  • 当它被嵌套进 SUM 等函数时,会对返回的区域进行计算。

三、参数说明

参数 是否必填 含义 取值说明
reference 必填 基准引用(起点) 可以是单元格(如 A1)或区域(如 A1:C3)。偏移是相对它的左上角进行计算
rows 必填 行偏移量 正数向下,负数向上,0 表示不移动
cols 必填 列偏移量 正数向右,负数向左,0 表示不移动
[height] 可选 返回区域的高度(行数) 省略时,默认与 reference 高度一致;必须为正整数
[width] 可选 返回区域的宽度(列数) 省略时,默认与 reference 宽度一致;必须为正整数

补充说明:

  • OFFSET 返回的是引用,所以它经常与 SUMAVERAGECOUNTAMATCHINDEX 等一起使用来实现动态逻辑。
  • rowscols 可以是计算结果(例如引用单元格或 MATCH 的返回值),从而实现“按条件定位”。

四、基础用法示范

下面通过几个典型例子把 OFFSET 的思路讲透。示例以 A1 为基准区域左上角(你可以替换为自己的真实表格位置)。

1)偏移得到单个单元格的值

需求:以 A1 为起点,取“向下 2 行、向右 1 列”的单元格值(也就是 B3)。

=OFFSET(A1, 2, 1)

解释:从 A1 出发,下移 2 行到 A3,右移 1 列到 B3,返回对 B3 的引用。


2)返回一个区域引用

需求:以 A1 为起点,移动到 B2,并返回一个高 3 行、宽 2 列的区域(即 B2:C4)。

=OFFSET(A1, 1, 1, 3, 2)

解释:

  • 先定位左上角:A1 → 下移 1 行、右移 1 列 = B2
  • 再定义区域大小:高度 3、宽度 2 = B2:C4

单独写在单元格里时,通常只显示该区域左上角 B2 的值;更常见是嵌套到汇总函数里。


3)配合 SUM 做动态求和

数据假设

  • 数据在 B2:B1000 持续向下增长(中间不留空更好)
  • 你希望永远求出 最新的最后 5 条记录之和

公式:

=SUM(OFFSET(B2, COUNTA(B:B)-5, 0, 5, 1))

思路拆解:

  • COUNTA(B:B) 统计 B 列非空单元格数量(含表头时要注意起始行)
  • OFFSET(B2, COUNTA(B:B)-5, 0, 5, 1):从 B2 往下偏移到“最后 5 行的起点”,再取高度 5、宽度 1 的区域
  • SUM(...) 对该动态区域求和

如果 B 列包含表头或其他非数据内容,建议把统计范围收窄(例如 COUNTA(B2:B1000)),并相应调整偏移量,更稳定。


4)配合 AVERAGE 做动态平均

需求:N 写在 E1,对 B2 开始的前 N 行求平均。

=AVERAGE(OFFSET(B2, 0, 0, E1, 1))

解释:

  • 起点是 B2,不偏移(rows=0, cols=0
  • 高度由 E1 决定(动态行数),宽度 1 列
  • AVERAGE 对动态区域求平均

5)结合 MATCH 实现“按列名定位”并取值

需求:表头在 A1:D1,数据在 A2:D100。 给定一个列名在 F1(例如“销量”),要从第 2 行(A2 这一行)取该列的值。

=OFFSET(A2, 0, MATCH(F1, A1:D1, 0)-1)

解释:

  • MATCH(F1, A1:D1, 0) 找到列名在表头中的第几列(从 1 开始)
  • OFFSET(A2, 0, ...-1):以 A2 为基准,向右偏移到目标列(因为 A2 本身就是第 1 列,所以要减 1)

6)滚动窗口:每次取连续 7 天数据

需求:假设日数据在 B2:B366,起始位置由 E1 控制(例如 E1=1 表示从 B2 开始,E1=2 表示从 B3 开始),每次取连续 7 天求和。

=SUM(OFFSET(B2, E1-1, 0, 7, 1))

这类写法常用于周统计、滑动平均、周期窗口等分析。


五、总结

  • OFFSET 的核心能力是:从基准引用出发,按行列偏移定位,并返回一个引用(单元格或区域)
  • 记住两个步骤就能用好它:

    1. rowscols 确定返回区域的左上角
    2. heightwidth 确定返回区域的大小(不写则沿用基准引用大小)
  • OFFSET 最常见的价值在于动态区域:与 SUM/AVERAGE/COUNTA/MATCH 等组合后,可以实现动态报表、滚动窗口、按列名/条件定位等需求。