在 Excel 中,Indirect函数用于返回文本字符串指定的单元格引用;它共有两个参数,第一个参数是文本字符串,第二个参数是引用类型,特别要注意第一个参数必须为文本,否则会返回错误。它既能在同一工作簿中引用又能跨工作簿引用,但引用不能超过 Excel 允许的最大行数和最大列数;另外,Indirect函数通常与Address、Match、Row、Column函数组合使用实现在同一表格按条件批量提取数据和把数据从多个表格提取到一个表格;以下就是Excel用Indirect函数引用单元格和提取数据的具体操作方法,共有6个实例,实例操作中所用版本均为 Excel 2016。
一、Excel Indirect函数的用法及实例
(一)A1 为 True(或省略)的实例
1、假如要返回任意指定单元格的内容。双击 A8 单元格,输入公式 =Indirect(a4),按回车,返回 #REF! 错误;双击 A8,把公式改为 =INDIRECT("A"&4),按回车,返回 A4 中的内容“沙糖桔”;再次双击 A8,在公式后输入 True,按回车,返回与上次一样的结果;操作过程步骤,如图1所示:
2、公式说明:
A、公式 =Indirect(a4) 之所以会返回引用错误 #REF!,是因为Indirect函数的第一个参数 Ref_Text 必须为文本,而 a4 是对具体单元格的引用,a4 在公式中会解析为它的内容“沙糖桔”,按住 Alt,分别按 M 和 V 打开“公式求值”窗口后求值可知,演示如图2所示:
B、而公式 =INDIRECT("A"&4) 能返回正确的值,是因为 "A"&4 为文本,因此要使Indirect函数返回正确的值,它的第一个参数必须为文本。
(二)A1 为 False 的实例
1、双击 D8 单元格,输入公式 =INDIRECT("R"&ROW(A5)&"C"&COLUMN(D1),FALSE),如图3所示:
2、按回车,返回第五行第四列(即 D5)中的数值 1558,如图4所示:
3、公式说明:ROW(A5) 返回 A5 的行号 5;COLUMN(D1) 返回 D1 的列号 4;则公式变为 =INDIRECT("R"&5&"C"&4,FALSE),进一步计算把每个字符连接起来,即 "R5C4",也就是引用第 5 行第 4 列,即 D5; R 和 C 分别代表行和列。
(三)引用 Excel 允许的最大行数或列数实列
1、双击 B2 单元格,把公式 =INDIRECT("A"&1048576) 复制到 B2,按回车,返回第一列最后一行的值 1048576;选中 A1,按快捷键 Ctrl “向下方向键”定位到最后一行,可以看到 A1048576 中值正是返回值,当往下移动时,再也没有出现空行,说明已到 Excel 允许的最大行数;再按 Ctrl “向上方向键”重新回到第一行,双击 B3,输入公式 =INDIRECT("XFD"&1),按回车,返回第一行最后一列的值 16384,按 Ctrl “向右方向键”定位到最后一列,XFD1 的值恰好是返回值,并且 XFD 已经是 Excel 允许的最后一列,按 Ctrl “向左方向键”定位回第一列;操作如图5所示:
2、上面的公式也可以用 R1C1 的样式,例如返回 Excel 允许的最大行数和列数所对应的单元格中的值,公式可以这样写 =INDIRECT("R"&1048576&"C"&16384,FALSE),把公式复制到 XEY1048576 单元格,如图6所示:
按回车,返回 XFD1048576 中的数值 10065536,如图7所示:
(四)Indirect函数跨表引用实例
1、假如要在一个工作表(水果表1)中引用另一个工作表(水果表2)的 A2。双击“水果表1”的 B8 单元格,把公式 =INDIRECT("水果表2!"&"A2") 复制到 B8,按回车,返回“香蕉”,单击标签“水果表2”切换到它,A2 中的文字正是返回值;操作如图8所示:
2、用Indirect函数跨表引用(即外部引用),只需在所要引用的单元格前多加工作表名称和感叹号 !,并且要用双击引号把它们括起来,如演示中的“"水果表2!"&"A2"”。
二、Excel用Indirect函数跨表格批量提取数据
(一)Indirect Row Address Column 组合实现把多个表格中指定行的数据提取到一个表格
1、假如要把三个表格(4月、5月和6月)中的第 5 行 B 到 D 列提取到“总表”。双击 B2 单元格,把公式 =INDIRECT(ROW(A4)&"月!"&ADDRESS(ROW($A$5),COLUMN(B$1))) 复制到 B2,按回车,返回表格“4月”中 B2 的名称“红色雪纺T恤”,选中 B2,把鼠标移到 B2 右下角的单元格填充柄上,鼠标变为粗体加号后,按住左键,往右拖,一直拖到 C2,则返回“红色雪纺T恤”的价格和销量;再把鼠标移到 C2 的单元格填充柄上,往下拖,则返回表格“5月和6月”第 5 行 B 列至 D 列的数据;操作步骤,如图9所示:
2、公式 =INDIRECT(ROW(A4)&"月!"&ADDRESS(ROW($A$5),COLUMN(B$1))) 说明:
A、ROW(A4) 返回 A4 的行号 4,这里用于返回工作表“4月”中的 4,因为要提取数据的表格前面是 4、5、6,当往下拖时,A4 会变为 A5、A6,也就是自动变为其余表格的名称。
B、$A$5 中的 $ 表示绝对引用,A 和 5 前都有它,说明对列和行都是绝对引用,即无论是往右还是往下拖,A5 都不会变;ROW($A$5) 返回 A5 的行号 5,并且无论往哪拖,始终返回行号 5。
C、B$1 表示对列相对引用而对行绝对引用,往右拖时,B1 会变为 C1、D1 等,在这里用于实现返回不同列的列号;COLUMN(B$1) 返回 B1 的列号 2,当拖到 C1 时,返回 C1 的列号 3,其它的以此类推。
D、则公式变为 =INDIRECT(4&"月!"&ADDRESS(5,2));ADDRESS(5,2) 中,5 为行号、2 为列号,其作用是返回第五行第二列的引用,即返回 $B$5;则公式变为 =INDIRECT(4&"月!"&$B$5),也就是返回工作表“4月”中 B5 的内容。
(二)Indirect Match Column 组合实现按条件批量提取数据
1、有一个月份销量表,假如要求提取任意月份的销量。双击 B12,把公式 =INDIRECT("r"&MATCH($A12,$A$1:$A$9,)&"c"&COLUMN(),0) 复制到 B12,按回车返回“T恤”“1月”的销量 567;选中 B12,用往右拖的方法提取“1月”剩余服装的销量,再用往下拖的方法提取“3月和7月”的销量;操作步骤如图10所示:
2、公式 =INDIRECT("r"&MATCH($A12,$A$1:$A$9,)&"c"&COLUMN(),0) 说明
A、MATCH($A12,$A$1:$A$9,) 用于返回 A12(即“1月”) 在 A1:A9 中的位置,Match函数省略了最后一个参数,默认查找小于等于查找值“1月”的最小值,“1月”在 A1:A9 的第二个位置,因此返回 2,但 A1:A9 需要按升序排序,否则可能返回不正确的位置。
B、COLUMN() 返回公式所在列的列号,当公式在 B12,返回列号 2;当公式在 C12 时,返回列号 3;其它的以此类推。
C、则公式变为 =INDIRECT("r"&2&"c"&2,0),继续计算变为 =INDIRECT("r2c2",0);r2c2 表示返回第二行第二列对应单元格的引用,即返回 B2 中的数值;参数 0 相当于 False,即把 "r2c2" 解释为 R1C1 的样式。
三、Excel Indirect函数语法
1、表达式:INDIRECT(Ref_Text, [A1])
中文表达式:INDIRECT(引用文本, [引用类型])
2、说明:
A、Ref_Text 既可以是内部引用(在本工作簿中引用)又可以是外部引用(对另一工作簿的引用),如果是外部引用,所引用的工作簿必须打开,否则将返回引用错误 #Ref!;另外,Excel Web App 不支持外部引用。
B、Ref_Text 引用的单元格区域不能超出 Excel 允许的最大行数 1048576 或最大列数 16384(XFD),否则也返回 #REF! 错误;但 Excel 早期版本会忽略这一限制且返回一个值。
C、A1 有两个可选值,即 True(或省略)和 False;如果为 True,则解释为如 A1 这样的引用;如果为 False,解释为 R1C1,R 表示“行”,C 表示“列”,R1C1 表示对第一行第一列的引用,即 A1。无论哪种引用方式,如果引用单元格不存在,都将返回错误。