Excel 其他引用函数 #

函数概览 #

引用函数用于创建动态引用,是构建灵活公式的重要工具。

text
┌─────────────────────────────────────────────────────────────┐
│                    引用函数一览                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  INDIRECT   文本转引用  =INDIRECT("A1")                     │
│  OFFSET     偏移引用    =OFFSET(A1, 1, 2)                   │
│  ADDRESS    创建地址    =ADDRESS(1, 1)                      │
│  COLUMN     列号        =COLUMN(A1)                         │
│  ROW        行号        =ROW(A1)                            │
│  COLUMNS    列数        =COLUMNS(A1:C1)                     │
│  ROWS       行数        =ROWS(A1:A3)                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

INDIRECT 函数 #

语法 #

excel
=INDIRECT(ref_text, [a1])

参数:
- ref_text: 引用文本
- a1: 引用样式(TRUE=A1样式,FALSE=R1C1样式)

返回:文本对应的单元格引用

基本用法 #

excel
=INDIRECT("A1")              返回A1单元格的值
=INDIRECT("Sheet2!A1")       返回Sheet2的A1值
=INDIRECT(B1 & "!" & "A1")   动态构建工作表引用

动态引用 #

excel
根据单元格内容创建引用:

    A          B          C
1   A1         100        
2   B1         200        

=INDIRECT(A1)  → 100(引用A1单元格)
=INDIRECT(A2)  → 200(引用B1单元格)

跨工作表引用 #

excel
动态工作表引用:

    A          B
1   Sheet1     =INDIRECT(A1 & "!A1")
2   Sheet2     =INDIRECT(A2 & "!A1")

根据A列的工作表名,引用对应工作表的A1单元格

实际应用 #

excel
动态范围引用:
=SUM(INDIRECT("A1:A" & B1))

根据B1的值确定范围:
如果B1=10,则计算A1:A10的和

动态工作表汇总:
=SUMPRODUCT(INDIRECT("'" & 工作表列表 & "'!A1"))

多工作表数据汇总

实际示例 #

text
多工作表汇总:
    A            B
1   工作表       A1值
2   Sheet1       =INDIRECT(A2 & "!A1")
3   Sheet2       =INDIRECT(A3 & "!A1")
4   Sheet3       =INDIRECT(A4 & "!A1")

注意事项 #

excel
INDIRECT 是易失性函数:
- 每次工作表计算都会重新计算
- 可能影响性能
- 关闭工作簿时引用会失效

建议:
- 大量数据时谨慎使用
- 考虑使用 INDEX 替代

OFFSET 函数 #

语法 #

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

参数:
- reference: 基准单元格
- rows: 行偏移量(正数向下,负数向上)
- cols: 列偏移量(正数向右,负数向左)
- height: 返回范围的高度(可选)
- width: 返回范围的宽度(可选)

返回:偏移后的单元格引用

基本用法 #

excel
=OFFSET(A1, 1, 0)            A1向下1行,即A2
=OFFSET(A1, 0, 1)            A1向右1列,即B1
=OFFSET(A1, 2, 3)            A1向下2行向右3列,即D3
=OFFSET(A1, -1, 0)           A1向上1行(可能超出范围)

返回范围 #

excel
=OFFSET(A1, 0, 0, 3, 1)      返回A1:A3范围
=OFFSET(A1, 0, 0, 1, 3)      返回A1:C1范围
=OFFSET(A1, 0, 0, 3, 3)      返回A1:C3范围

配合其他函数:
=SUM(OFFSET(A1, 0, 0, 5, 1))  求A1:A5的和
=AVERAGE(OFFSET(A1, 0, 0, 10, 1))  求A1:A10的平均值

动态范围 #

excel
创建动态命名范围:

名称:动态数据
引用:=OFFSET(Sheet1!$A$1, 0, 0, COUNTA(Sheet1!$A:$A), 1)

根据数据量自动调整范围

实际应用 #

excel
滚动求和(最近N个值):
=SUM(OFFSET(A1, COUNTA(A:A)-5, 0, 5, 1))

计算最后5个数据的和

动态图表数据源:
=OFFSET(Sheet1!$A$1, 0, 0, COUNTA(Sheet1!$A:$A), 2)

自动适应数据量的图表范围

实际示例 #

text
滚动平均值:
    A          B
1   数据       最近3个平均
2   10         =AVERAGE(OFFSET(A2, 0, 0, MIN(ROW(A2), 3), 1))
3   20         =AVERAGE(OFFSET(A3, MAX(0, ROW(A3)-3), 0, 3, 1))
4   30         → 20((10+20+30)/3)
5   40         → 30((20+30+40)/3)

注意事项 #

excel
OFFSET 是易失性函数:
- 每次工作表计算都会重新计算
- 可能影响性能

建议:
- 大量数据时谨慎使用
- 考虑使用 INDEX 替代

ADDRESS 函数 #

语法 #

excel
=ADDRESS(row_num, column_num, [abs_num], [a1], [sheet_text])

参数:
- row_num: 行号
- column_num: 列号
- abs_num: 引用类型(1=$A$1, 2=A$1, 3=$A1, 4=A1)
- a1: 引用样式(TRUE=A1, FALSE=R1C1)
- sheet_text: 工作表名

返回:单元格地址文本

基本用法 #

excel
=ADDRESS(1, 1)               → "$A$1"
=ADDRESS(1, 1, 4)            → "A1"
=ADDRESS(1, 1, 2)            → "A$1"
=ADDRESS(1, 1, 3)            → "$A1"
=ADDRESS(5, 3)               → "$C$5"

实际应用 #

excel
构建动态引用:
=INDIRECT(ADDRESS(ROW(), COLUMN()))

获取当前单元格的值

查找后返回地址:
=ADDRESS(MATCH("值", A:A, 0), 1)
返回找到值所在的单元格地址

实际示例 #

text
动态引用:
    A          B
1   行号       列号
2   5          3

=ADDRESS(A2, B2)  → "$C$5"
=INDIRECT(ADDRESS(A2, B2))  → 返回C5单元格的值

COLUMN 和 ROW 函数 #

COLUMN 函数 #

excel
=COLUMN()                    当前列号
=COLUMN(A1)                  → 1
=COLUMN(C1)                  → 3
=COLUMN(A1:C1)               → {1,2,3}(数组)

ROW 函数 #

excel
=ROW()                       当前行号
=ROW(A1)                     → 1
=ROW(A5)                     → 5
=ROW(A1:A3)                  → {1,2,3}(数组)

实际应用 #

excel
自动编号:
=ROW()-ROW($A$1)+1

生成序列:
=ROW(A1:A10)-ROW(A1)+1  → 1,2,3,...,10

动态列号:
=COLUMN()-COLUMN($A$1)+1

VLOOKUP 动态列号:
=VLOOKUP($A1, $B:$E, COLUMN(A1), FALSE)
向右拖动自动调整列号

实际示例 #

text
自动序号:
    A          B
1   序号       数据
2   =ROW()-1   产品A
3   =ROW()-1   产品B
4   =ROW()-1   产品C

结果:
    A          B
1   序号       数据
2   1          产品A
3   2          产品B
4   3          产品C

COLUMNS 和 ROWS 函数 #

COLUMNS 函数 #

excel
=COLUMNS(A1:C1)              → 3
=COLUMNS(A1:Z1)              → 26
=COLUMNS(范围)               返回范围的列数

ROWS 函数 #

excel
=ROWS(A1:A3)                 → 3
=ROWS(A1:A100)               → 100
=ROWS(范围)                  返回范围的行数

实际应用 #

excel
计算范围大小:
=ROWS(A1:A100) * COLUMNS(A1:Z1)

动态范围行数:
=ROWS(INDIRECT("A1:A" & B1))

检查数据完整性:
=IF(ROWS(A:A)=ROWS(B:B), "完整", "不完整")

函数组合应用 #

动态范围求和 #

excel
=SUM(INDIRECT("A1:A" & B1))

或使用 OFFSET:
=SUM(OFFSET(A1, 0, 0, B1, 1))

或使用 INDEX:
=SUM(A1:INDEX(A:A, B1))

动态工作表引用 #

excel
=INDIRECT("'" & A1 & "'!B1")

根据A1的工作表名,引用对应工作表的B1单元格

滚动计算 #

excel
最近N个值的平均:
=AVERAGE(OFFSET(A1, MAX(0, COUNTA(A:A)-N), 0, N, 1))

或使用 INDEX:
=AVERAGE(INDEX(A:A, MAX(1, COUNTA(A:A)-N+1)):INDEX(A:A, COUNTA(A:A)))

创建动态图表 #

excel
定义名称:
数据范围 = OFFSET(Sheet1!$A$1, 0, 0, COUNTA(Sheet1!$A:$A), 2)

图表数据源使用该名称,自动适应数据量变化

实战案例 #

案例1:多工作表汇总 #

text
工作表列表:
    A            B
1   工作表       A1值
2   Sheet1       =INDIRECT(A2 & "!A1")
3   Sheet2       =INDIRECT(A3 & "!A1")
4   Sheet3       =INDIRECT(A4 & "!A1")

汇总:
=SUMPRODUCT(INDIRECT("'" & A2:A4 & "'!A1"))

案例2:动态报表 #

text
数据:
    A          B          C
1   月份       销售额     累计
2   1月        100        =SUM($B$2:B2)
3   2月        150        =SUM($B$2:B3)
4   3月        200        =SUM($B$2:B4)

使用 OFFSET:
=SUM(OFFSET($B$2, 0, 0, ROW()-1, 1))

案例3:查找最大值位置 #

text
数据:
    A          B
1   数据       最大值位置
2   10         =ADDRESS(MATCH(MAX(A:A), A:A, 0), 1)
3   30         → "$A$3"
4   20

获取最大值所在单元格的地址

小结 #

引用函数是创建动态公式的重要工具:

函数 用途 示例
INDIRECT 文本转引用 =INDIRECT("A1")
OFFSET 偏移引用 =OFFSET(A1, 1, 2)
ADDRESS 创建地址 =ADDRESS(1, 1)
COLUMN 列号 =COLUMN(A1)
ROW 行号 =ROW(A1)
COLUMNS 列数 =COLUMNS(A1:C1)
ROWS 行数 =ROWS(A1:A3)

接下来,让我们学习 信息函数,掌握数据类型判断技巧。

最后更新:2026-04-11