ADDRESS 和 INDIRECT 组合的核心思路是:ADDRESS 负责“算出地址文本”,INDIRECT 负责“把文本变成真正的引用”
浅谈出口账务和excel函数 ADDRESS 和 INDIRECT 组合的核心思路是:ADDRESS 负责“算出地址文本”,INDIRECT 负责“把文本变成真正的引用”。
=INDIRECT(ADDRESS(行号, 列号, ...))
· INDIRECT("$C$2") → 取 C2 的值
假设 A1 填了数字 5,要取 第5行、第2列(B列) 的值:
· 若 A1=5,ADDRESS(5,2) → $B$5
假设第1行是表头(A1=姓名, B1=语文, C1=数学),要取“数学”列第3行的值:
=INDIRECT(ADDRESS(3,MATCH("数学",1:1,0)))
=INDIRECT(ADDRESS(A10,B10))
· 若 A10=4,B10=2 → 取 B4 的值
=INDIRECT(ADDRESS(2,3,1,TRUE,"Sheet2"))
· INDIRECT → 取 Sheet2 的 C2 值
工作表名也可动态,比如 A1 填“Sheet2”:
=INDIRECT(ADDRESS(2,3,1,TRUE,A1))
对 C2:C10 求和,但行号由 A1、A2 决定(比如 A1=2,A2=10):
=SUM(INDIRECT(ADDRESS(A1,3)&":"&ADDRESS(A2,3)))
· INDIRECT 里的文本必须是合法地址,否则返回 #REF!。
· ADDRESS 默认返回绝对引用(带 $),通常不影响 INDIRECT 取值;若要拼接成区域,一般用默认绝对引用更稳。
· 工作表名含空格或特殊字符时,ADDRESS 会自动加单引号,如 'My Sheet'!$C$2,INDIRECT 能识别。
· INDIRECT 是易失性函数,大量使用会拖慢表格计算;能直接用 INDEX/OFFSET 时优先考虑它们。
· 若引用的工作表已关闭,INDIRECT 无法取值,会报错。
多数“动态引用”场景,用 INDEX 更高效且不易出错:
· 上面例3可写成 =INDEX(C:C,3) 或 =INDEX(3:3,MATCH("数学",1:1,0))
· 双向查找可写成 =INDEX(B:D,4,2)
ADDRESS+INDIRECT 更适合地址本身需要以文本形式拼接、展示或传递的场景。