提取多个工作表中相同位置单元格中数据,要想职场混得好,这个问题跑不了!
01
问题描述
Excel情报局
昨天晚上有些疲惫,刚想睡觉。。。突然收到公众号的粉丝留言。
他语气很急:表哥,能帮我处理个数据吗?这份表我搞了8个小时,眼睛都花了,实在弄不完了。
他发给我一看,原来是表格间提取数据的问题:提取1500个工作表中相同位置单元格中数据,放置到另外一个表格的一列中。
他的做法是一个一个复制粘贴,重复1500次,搞了8个小时。
我花了一分钟,写了一个定义函数和INDIRECT函数公式,很快的解决了这个问题。
做完后数据回传给他,他惊奇的连忙表示感谢。
这就是Excel的强大的力量,同样一项工作,有技巧与没有技巧,工作时间相差了几个甚至十几个小时。所以Excel作为日常使用频率这么高的工具,掌握一些技能真的很有现实意义。
②表2:“财务部”:
③表3:“生产部”:
现在我们想要批量提取“销售部”、“财务部”、“生产部”这3个工作表中表格位置B3单元格中的数据,放置到工作表名称为“提取”表中的A列单元格中。
如下图所示:
02
如果工作表名称为顺序序号
Excel情报局
如果工作表名称为顺序序号,比如为:“1,2,3....”,我们可以利用INDIRECT函数进行操作实现。
INDIRECT函数含义:
此函数立即对引用进行计算,并显示其内容。当需要更改公式中单元格的引用,而不更改公式本身,请使用此函数,INDIRECT为间接引用。
INDIRECT函数公式及参数:
=INDIRECT(ref_text,[a1])
①Ref_text 为对单元格的引用,此单元格可以包含 A1-样式的引用、R1C1-样式的引用、定义为引用的名称或对文本字符串单元格的引用。
②如果 ref_text 不是合法的单元格的引用,函数 INDIRECT 返回错误值#REF!或#NAME?。
③如果 ref_text 是对另一个工作簿的引用(外部引用),则工作簿必须被打开。如果源工作簿没有打开,函数 INDIRECT 返回错误值#REF!。
④a1 为一逻辑值,指明包含在单元格ref_text 中的引用的类型。
如果 a1 为 TRUE 或省略,ref_text 被解释为 A1-样式的引用。
如果 a1 为 FALSE,ref_text 被解释为 R1C1-样式的引用。
在“提取”表格A2单元格输入函数公式:
=INDIRECT("'1'!B3")
下拉填充后,我们发现只有A2单元格显示的值是正确的,其余的是错误的。原因是:公式中的工作表名称没有对应改变。始终显示的是“1”。
所以我们必须使用ROW函数来智能提取行号来实现工作表名称的改变。
ROW函数含义:
ROW函数作用是返回一个引用的行号。
ROW函数公式及参数:
ROW(reference)
①Reference 为需要得到其行号的单元格或单元格区域。
②如果省略 reference,则假定是对函数 ROW 所在单元格的引用。
③如果 reference 为一个单元格区域,并且函数 ROW 作为垂直数组输入,则函数 ROW 将 reference 的行号以垂直数组的形式返回。
④Reference 不能引用多个区域。
在“提取”表格A2单元格输入函数公式,即用ROW函数嵌套进INDIRECT中:
=INDIRECT(ROW(A1)&"!B3")
下拉填充公式,即可提取成功。
03
如果工作表名称为普通文本
Excel情报局
如下图所示这种情况:
我们的工作表名称不是顺序序号“1,2,3....”这种格式了,而是普通文本“销售部”、“财务部”、“生产部”这种汉字形式,所以就不能像上面那样利用ROW函数提取行号作为工作表名称了。
我们需要先提取工作表的名称:
点击公式中的定义名称:
然后在定义名称输入:提取
在引用位置输入=GET.WORKBOOK(1)
然后B2单元格输入公式:
=INDEX(提取,ROW(A1))
回车结束公式,最后往下拉就完成工作表名称的提取了。
将公式部分单元格利用“选择性粘贴为数值”的方法将公式去掉,只留下文本值。
然后利用“查找和替换”的方法,将[Excel情报局.xls]这部分文本替换为空值删除。目的是:留下单纯的工作表名称。
最后A2单元格输入函数公式:
=INDIRECT(B2&"!B3")
下拉填充公式,即可完成最后的提取工作。