方法一
-
01
利用VBA将数据区域不定的多个工作表数据快速合并到一个工作表。 分别有工作表1、2、3数据区域,如下图所示:
-
02
按ALT+F11打开VBE编辑器,在工程窗口下的Microsoft Excel对象右键-插入-模块,新建一个模块1。
-
03
输入如下代码: OptionExplicit Subhbgzb() DimshAsWorksheet,flagAsBoolean,iAsInteger,hrowAsInteger,hrowcAsInteger flag=False Fori=1ToSheets.Count IfSheets(i).Name=”合并数据”Thenflag=True Next Ifflag=FalseThen Setsh=Worksheets.Add sh.Name=”合并数据” Sheets(“合并数据”).Moveafter:=Sheets(Sheets.Count) EndIf Fori=1ToSheets.Count IfSheets(i).Name<>”合并数据”Then hrow=Sheets(“合并数据”).UsedRange.Row hrowc=Sheets(“合并数据”).UsedRange.Rows.Count If hrowc = 1 Then Sheets(i).UsedRange.CopySheets(“合并数据”).Cells(hrow,1).End(xlUp) Else Sheets(i).UsedRange.CopySheets(“合并数据”).Cells(hrow+hrowc-1,1).Offset(1,0) EndIf EndIf Nexti EndSub
-
04
按ALT+F8打开宏对话框窗口,鼠标单击执行hbgzb宏。
-
05
实现如图所示效果:
-
06
说明:本段VBA代码由于将编辑过的区域作为源数据区域,顾无论该数据源有无数据,只要曾经编辑过皆做为源数据源,做拷贝处理。
方法二
-
01
适用于工作表数量不多,数据量不大的情况。 如下图所示,我们可以发现,各个地区的工作表模板都是一致的。
-
02
可以通过在汇总表中使用【=工作表!单元格】获取数据,并通过向右、向下填充数据行。
-
03
当一个工作表数据填充完成后,往下的数据行值为0,此时,切换第二个工作表继续进行填充,直至填充完毕。
-
04
结果如下图所示:
方法三
-
01
适用于工作表数量多,数据量大的情况。 新建名称DQ,引用位置输入公式【=RIGHT(GET.WORKBOOK(1),LEN(GET.WORKBOOK(1))-FIND(“]”,GET.WORKBOOK(1)))】,用于提取多个工作表名称。
-
02
在汇总表中增加辅助列,输入公式【=INDEX(DQ,INT((ROW(A2)-1)/10)+1)】,往下填充,每个工作表名称被引用10行。 注意:被引用行按需调整,如每个工作表名称需生成50行,调整公式中的10,改为50即可。
-
03
填充第一行数据,输入公式【=INDIRECT($A2&”!”&ADDRESS(COUNTIF($A$2:$A2,$A2)+1,COLUMN(A2)))】往右填充,完成第一行的填充。 说明:通过ADDRESS函数,定位到第二行第一列,即A2单元格;整个公式的意思是引用工作表【广州】中的A2单元格,值为“广州”。
-
04
往下填充,当一个工作表数据填充完成后,往下的数据行值为0,批量删除值为0的行即可。