【Excel函数教程】如何用INDIRECT函数实现动态跨表引用数据
90本电子书:Excel、Word、PPT、职场必备,总有一本是你需要的……
问题说明
本文所说的跨表引用指的是同一个文件中引用不同sheet中的数据,具体效果如图所示:
数据特点说明:若干工资表,动画中的是汇总表,另有若干分表,每个表格的结构都是完全相同的。
汇总表的A1单元格利用数据有效性设置了下拉选项,就是每个分表的名称。
关于有效性的设置方法可以参阅以前的教程,最终实现的效果就是通过汇总表中选择下拉菜单,引用所选内容对应sheet中的数据。
要实现这个目的,只需要一个公式就够了:
=INDIRECT($A$1&"!r"&ROW()&"c"&COLUMN(),0)
今天就通过这个实例再来与大家一同领略indirect函数的妙处。
indirect函数的基本作用就是按照指定的引用(或者说是地址、位置都行)得到对应的数据,函数一共两个参数,第一个参数引用的具体信息,第二个参数是具体的引用方式。
例如,当我们选中了B公司,汇总表中的B3单元格就应该对应显示B公司这个sheet中B3单元格的数据:
当我们选择了D公司,汇总表中的B3单元格就应该对应显示D公司这个sheet中B3单元格的数据,以此类推,这一点很好理解,关键的问题是B公司这个sheet中B3单元格如何表示?
我们可以直接在单元格输入=进行引用,编辑栏就可以看到具体的引用内容:=B公司!B3
如果使用了indirect函数的话,公式就可以写成=INDIRECT("B公司!B3"),注意这里的引用位置要加上引号。
但是当公式右拉下拉我们会发现一个问题,全部都是B3这个单元格的数据,并没有变成B公司的C3、D3等等……
这是因为引号中使用的地址是一个固定不变的内容,要想根据位置进行变化,就需要在引用地址中加入变量(可能有那么一点点不好理解)~~
更不好理解是,为了适应这种需求,还得放弃我们熟悉的A1引用模式,使用另一种叫做RC引用模式的方法。
A1引用:用字母表示列,用数字表示行,行列交叉位置的单元格就是引用所表示的单元格。例如D3,表示D列第三行的单元格,这是我们非常熟悉的一种表示方式。
RC引用:也叫R1C1引用,R代表行,C代表列,分别用数字表示对应行列交叉处的单元格。例如D3用RC表示的话就是R3C4(表示第三行第四列,好像不是那么难以理解,更多的感觉是不习惯)
使用RC模式的话,"B公司!B3"就是"B公司!r3c2","B公司!C3"就是"B公司!r3c3","B公司!B4"就是"B公司!r4c2"等等……(感觉晕的话自己慢慢体会吧)
对比这几个引用的特点,发现变化的就是R后面和C后面的数字,因此就考虑用row和column两个函数作为变量。
常量部分加引号,通过&与变量进行连接,就得到了:
"B公司!r"&ROW()&"c"&COLUMN()
完整的公式为:
=INDIRECT("B公司!r"&ROW()&"c"&COLUMN(),0)
当使用RC模式时,indirect第二参数要使用0,第二参数为1或者省略时表示使用A1模式。
此时公式实现了整个区域的引用,但是还不能切换工作表,需要将“B公司”这部分内容从A1单元格获得。
于是就有了公式:
=INDIRECT($A$1&"!r"&ROW()&"c"&COLUMN(),0)
注意这里的A1要加$锁定
关于indirect这个函数,比较难以理解的通常有两点:
1、作为一个引用函数,新手们往往对应“引用”这个概念本身理解的比较模糊,因此就不容易理解indirect中什么时候要加引号,什么时候又不加引号。这是对函数本身的原理不了解所致,同时也说明了自身的基础知识比较薄弱。
2、对于RC引用模式的不习惯,这个概念解释一下很好理解,但是用的时候就是不习惯,需要一个熟练的过程。
但是不管indirect有多么难以理解,这个函数在跨表(包括跨文件)引用方面都是无可取代的。