一、实例展示
最近呢,闲来无事,我给各位大侠们做了个武力对比图,如下(Sheet0):
后来,张三李四对自己得分低很不服气,要我给他出一个报告(每个人一份那种),于是我就需要给每个人建一个工作表,表头就是名字和分数,像这样:
但是我很不喜欢复制粘贴,如果少林寺那么多人每个人都要我出报告,光写表头按“Ctrl+C”和“Ctrl+V”都会按得我手疼,怎么办呢?只要有如Sheet0的总表,就好办,我们可以让后面每个工作表在Sheet1中提取名字和分数就好了。如下,我要开始写公式了:
第一步 把名字调用过来
在sheet1的A1单元格中输入公式:=INDIRECT("Sheet1!A"&(MID(CELL("filename",A1),FIND("]",CELL("filename"))+6,100)))
然后Sheet1的A1单元格就会出现“张三”,同样复制到sheet2的A1单元格,就会出现“李四”。。。
第二步 把分数调用过来
接下来我们用同样的方法,把分数也引用过来,公式稍微变一变,
在Sheet1的B1单元格中输入公式:=INDIRECT("Sheet0!B"&(MID(CELL("filename",B1),FIND("]",CELL("filename"))+6,100)))
然后Sheet1的B1单元格就会出现张三的分数——50,同样复制到sheet2的B1单元格,就会出现李四的分数——55,如此类推。
到此成果就出来了。
二、公式解释
在刚才所有的操作中,大概用了三层嵌套:
第一层:取出工作表的序号——目标是要工作表名称最后的阿拉伯数字,用到Mid、Cell、Find函数;
具体为:=MID(CELL("filename",A1),FIND("]",CELL("filename"))+6,100)
对于Sheet1工作表来说,取出的序号是“1”
第二层:将“Sheet0!A”与第一层取出的数字连接,字符格式;
具体为:="Sheet0!A"&
第一层的内容对于Sheet1工作表来说,得到的结果是“Sheet0!A1”
第三层:用“Indirect”函数调用。
具体为:=INDIRECT(
第二层的内容)对于Sheet1工作表来说,得到的结果就是调用到Sheet0的A1单元格的内容——张三
如果你有兴趣,可以将第一二三层的内容放到三个单元格中,一步一步细细品味。
三、如果到这里你还是蒙圈的,那说明你对基础的函数不是太熟悉,那我就来解释一下基础的函数用法
1. 调用本工作表完整路径,在任意单元格输入
=CELL("filename",A1)
比如 D:\B.知识\13.office使用技巧\[Excel跨工作表调用方法心得(吉朋朋2018.10.31).xls]Sheet1
2. 调用工作表名
=MID(CELL("filename",A1),FIND("]",CELL("filename"))+6,100)
释义:
MID函数的意思是:在一串字符中的某一位开始,取出一定量的字符。
本公式就是在刚才得到的路径中,找到方括号”]”,然后往后推6位(+6),取100个数(实际只有1位数字了)。为什么是推6位?因为Sheet一共是5位字符,第六位就是我们需要的数字。
FIND("]",CELL("filename"))的意思是在文件名中找后方括号,路径中都有前后方括号,方括号内是整个工作簿名称,方括号后就是工作表名。
注意:用“cell”函数调用路径时,一定要加“A1”进行引用限制,否则调用的就是活动单元格的名称,也就是说将来会出现后面的多个工作表调用出来的值是一样的。
3.当源数据发生改变时,后面的工作表中的数据可能没更新,此时点进去工作表,F9更新数据。
四、应用畅想
1. 特别适用于做档案的情况,像我就用于做多个设备的检查报告。
2. 总表的数据调整了以后,分表的数据可以自动更新。
3. 。。。