分享

说起动态跨表引用,有效性 INDIRECT就无敌了!

 L罗乐 2018-06-30

事件说明

本文所说的跨表引用指的是同一个文件中引用不同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有多么难以理解,这个函数在跨表(包括跨文件)引用方面都是无可取代的。




    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多