VBA合并工作表(WorkSheet)
如果一个Excel工作簿文件中含有多个工作表,而且每个工作表中的数据结构基本相同,现在想把所有的工作表的数据合并到一个工作表中进行分析,该怎么办呢?
VBA可以解决这个问题。
首先在工作簿文件中插入一个名为“汇总”的空白工作表,然后按快捷键“ALT+F11”进入VBA开发环境,在左侧单击鼠标右键,选择“插入”——“模块”,在模块中输入如下VBA程序。
首先,定义一个Excel工作表类型的对象变量objSumSht。提前定义变量并明确指定变量类型的好处是,可以充分利用VBA开发环境所提供的该对象的属性和方法的自动提示功能。
接着,将工作表对象ThisWorkbook.Worksheets("汇总")赋值给对象变量objSumSht。此后就可以在程序中使用对象变量objSumSht代替工作表对象ThisWorkbook.Worksheets("汇总")了。
之后,是一个循环处理结构,用来处理ThisWorkbook中的每一个Worksheet,在处理每一个Worksheet时,需要判断该Worksheet的Name是不是objSumSht.Name(即“汇总”工作表)相同,只有当前工作表不是“汇总”工作表,才执行下面的数据合并操作。
再接着,表示工作表的最后一行objSumSht.Rows.Count(如果你正在使用的是Excel 2007或Excel 2010,那么objSumSht.Rows.Count的计算结果是1048576),End(xlUp).Row表示从工作表第1列的最后一行向上查找,直到第一次看到“不为空的单元格”为止时所在的行号,然后把这个行号加上1,表示下一次粘贴数据时的行号位置,最后把这个行号赋值给变量pasteRow。
最后,把正在处理的工作表的“使用区域(objWs.UsedRange)”,也就是含有数据的区域,复制并粘贴到“汇总”工作表objSumSht,粘贴的起始位置是.Cells(pasteRow, 1),也就是“汇总”工作表的数据区域下方的第1个空白行的第1个单元格处。
现在,把光标置于程序中的任意一行,按F5键执行程序,程序的执行结果如图所示。
领取专属 10元无门槛券
私享最新 技术干货