在知道回答问题的时候,看到过很多次网友提问,如何将多个工作表合并到一个工作表中。若是工作表数量少,一个个复制粘贴还能接受,但当有几十甚至上百个表,要汇总到一个工作表中时,不仅仅是工作量的问题了,可能还会误操作,导致数据复制粘贴错误。
这里给大家讲解一个如何利用VBA也就是宏命令来实现,将多个工作表合并到一个中,并且详细地接触代码的工作原理,以方便大家举一反三,能结合自己的实际需求,改造成自己需要的代码,从而达到提高工作效率和准确性的目的。
前期准备工作(包括相关工具或所使用的原料等)
Office2007详细的操作方法或具体步骤
有多个工作表(本例中有3个,跟300个是没有啥区别的),每个工作表的表头是一样的,但数据多少不一;需要把每个工作表的内容,汇总到具有同样表头的总表中,如下图所示。
其中,第一幅图为总表;第二、三、四幅图为分表1、2、3的数据内容。




Alt+F11,VBA快捷键,在弹出的新界面中,左键双击坐标的名为”总表“的工作表,使后续的代码是复制到这个工作表中。

在右边的空白区域,复制下面的代码,如下图所示:
Sub main()
For Each sh In Sheets
If sh.Name <> "总表" Then
i=sh.Range("D65536").End(3).Row
k=Range("A65536").End(3).Row
sh.Range("A2:D" & i).Copy Range("A" & k + 1)
End If
Next
End Sub

代码详解:
1.Sub main()——其中Sub 跟括号是固定的,main是宏名,可以随便更改(其实完全没有必要多此一举,这里可以不做任何修改)
2.For Each sh In Sheets——这是遍历全部的工作表,这里就要注意,如果你的工作表中包含一些,不需要汇总数据的工作表,那么就需要将源数据表备份一份,然后将不需要汇总数据的工作表都删除掉,只剩下总表以及需要汇总数据的工作表(当然,还有其他办法,这里只讲解最简单地做法)
3.If sh.Name <> "总表" Then——这里是判断工作表的名字是不是”总表“,如果是总表,就不汇总数据,本例中总表的名字就是”总表“,如果你的工作表中,总表名字是其他的,就将这里的”总表“改为你的工作总表明细;
4.i=sh.Range("D65536").End(3).Row——这里要注意了"D65536",是为了获得最后一个不为空的行的行号,这里用了D列,因为本例中的D列是有数据的,在实际的使用过程中,一定要选择一个最后一行有数据的列,否则不能获得最大行号(假如只有2列,那么这里的D可以改为B或者A)
5.k=Range("A65536").End(3).Row——这里是获得总表的最大行号,以便复制的数据,能够依次往下粘贴;(这里的A65536跟上面提到的是一个道理,总表中的A列最后一行不是空的)
6.sh.Range("A2:D" & i).Copy Range("A" & k + 1)——这里要注意“A2:D”&i是要复制的区域,因为本例中只有A-D列,而且数据是从第2行开始的,所以这里是A2:D,那假如是从E列第10行开始,到Z列结束的区域,就应该改为E10:Z;
Range("A" & k + 1)——这里是从总表的A列开始粘贴,假如是从D列开始,那么这里的A改为D即可
7.End If Next End Sub——这些是结束判断、继续循环和程序结束,都不需要更改。
执行代码方式很多,这里介绍三种:
1.是点击下图中所示的三角号,执行代码;
2.是还是在Alt+F11打开的界面中按F5,执行代码;

还有一种,是关闭代码界面,然后按Alt+F8,在新对话框中,选择名为main的宏,然后点击执行。

执行结束,就可以看到所有的工作表内容,都汇总到总表中来了。

注意事项
自行修改代码的时候,可以多做几次尝试,就更清楚每个代码是什么意思啦;但是在执行代码之前,请务必先备份数据,一旦执行了代码,数据是无法用Ctrl+Z来恢复的哟不用担心关闭VBA界面,代码保存的问题;其中的代码是跟工作表一起的,也就是说,工作表没有关闭,代码就不会消失;这也就意味着,保存工作表时,如果需要保存代码,注意保存Excel2007格式xlsx文件,是不带代码的,如果需要连代码一起保存,要保存为97-2003格式xls或者xlsm格式经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。作者声明:本教程系本人依照真实经历原创,未经许可,谢绝转载。- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
