最近帮一从事财务的朋友设置一套表格的数据关系,其实不复杂,只是涉及同一工作簿里一张汇总表汇总多张分表一些固定位置的数据(即一表对多表的数据引用),但是每一张表引用的数据项较多,分表也较多,还有多个工作簿需重复这个操作。
很明显,手动逐项建立数据关联是不切实际的,几天不吃不喝我都搞不好,而且,凡是在excel里做重复操作的都不是正确的方向,因为excel就是帮人类提高工作效率的。
我清晰知道需要一个公式,一个下拉就能快速复制填充数据的公式,但数据引用时涉及不同的表名(=表名!单元格),在下拉时如何能自动读取到这个不唯一的表名,因我知识局限性,一开始并未找到突破方向。
后来发现一个强大函数Indirect,直觉上能帮到我,经一番研究,终于掌握了它的基本用法,解决了问题。
官方释义为:此函数立即对引用进行计算,并显示其内容。当需要更改公式中单元格的引用,而不更改公式本身,请使用此函数,INDIRECT为间接引用。
在这段不是人话的释义里,“当需要更改公式中单元格的引用,而不更改公式本身”这句话正是我想要的,我正是需要实现一个公式对表名的动态引用,使用Indirect函数有几个要点:
1.首先要知道你想要的公式里,哪部分是动态变化的,哪部分是固定不变的,要区分变量和定量。
2.用英文状态的双引号("")号把每一块固定部分包住。
3.最后用连接符(&)连接起每一部分,组成所要的公式。
比如我的公式是上面的=INDIRECT("'"&D4&"'!D5"),括号里的一串东西表示引用的内容,实际上通过连接符连接了三块内容:一个单引号('),D4单元格,'!D5,去掉连接符和双引号后,三块内容顺着拼起来就是'D4'!D5,即'客户1'!D5,作用是引用客户1这张表的D5单元格内容。
小扩展知识:一般同一工作簿不同表间的数据引用格式是:表名!单元格,如果表名是数字开头或含有括号、短线等情况,引用时会多一对单引号,格式是:'表名!单元格'。为了确保引用有效,我的公式统一加了单引号。
因为我还需要引用多个表格的D5单元格内容,所以在我的这个公式里,表名是变量,D5这个位置及其它符号都是定量,于是D列的客户名称(即表名)就是我需要自动改变的内容,我只需要在H列下拉复制公式就能快速实现读取其它表格的D5单元格数据。
本文介绍的只是INDIRECT函数的简单应用,但却帮我了大忙,足见它的强大!理解此函数的使用方法后,其实使用不难,但在构建引用文本时(即本文的:"'"&D4&"'!D5")的细节处理我觉得最重要,处理好了才能达到目标。
想更直观的认识此函数,可自行搜索教学视频,会理解得更透彻。