有的时候我们需要将excel多个工作表中相同的某一列擢爻充种的数据提取出来合并汇总入一个工作表中,当然我们可以用复鲽判砦吟制、粘贴的方式来完成,但是如果工作表数量很多,那么复制、粘贴的方法效率显然很差,这时本文所介绍的VBA的方法不失为一种好的解决方法。
工具/原料
excel
VBA
方法/步骤
1、分别有工作表4,数据如下图示:
2、按ALT+F11打开VBE编辑器,在工程窗口下的MicrosoftExcel对象右键-插入-模块,新建一个模块1。
3、粘贴如下代码:OptionExplicitSub咯悝滩镞columncopy()DimcAsString,shAsWorksheet,iAsInte爿讥旌护ger,flagAsBoolean,bAsString,arr,lAsInteger,jAsInteger,minAsInteger,maxAsIntegerflag=Falsec=InputBox("请输入列号,如:A、B、C……","列号输入(请输入大写字母)")Fori=1ToSheets.CountIfSheets(i).Name="第"&c&"列合并数据"Thenflag=TrueNextIfflag=FalseThenSetsh=Worksheets.Addsh.Name="第"&c&"列合并数据"Sheets("第"&c&"列合并数据").Moveafter:=Sheets(Sheets.Count)EndIfb=InputBox("请指定需合并列的工作表,多张连续表请用“-”隔开,多张不连续表请用“,”隔开,如:1,2,3-5,6等。","指定工作表(请输入数字)")arr=Split(b,",",-1,vbTextCompare)IfSheets("第"&c&"列合并数据").Range("iv1").End(xlToLeft).Column=1Thenl=Sheets("第"&c&"列合并数据").Range("iv1").End(xlToLeft).ColumnElsel=Sheets("第"&c&"列合并数据").Range("iv1").End(xlToLeft).Column+1EndIfFori=0ToUBound(arr)IfInStr(arr(i),"-")Thenmin=Split(arr(i),"-",-1,vbTextCompare)(0)max=Split(arr(i),"-",-1,vbTextCompare)(1)Forj=minTomaxSheets(j).Columns(c&":"&c).CopyDestination:=Sheets("第"&c&"列合并数据").Cells(1,l)l=l+1NextjElseSheets(CInt(arr(i))).Columns(c&":"&c).CopyDestination:=Sheets("第"&c&"列合并数据").Cells(1,l)l=l+1EndIfNextEndSub
4、按ALT+F8打开宏对话框窗口,鼠标单击执行columncopy宏。
5、在弹出的“列号输入(请输入大写字母)”对话框中输入所需的列号(笔者测试输入:“B”列),点确定。
6、在弹出的“指定工作表(请输入数字)”对话框中按照要求输入所需的工作表(笔者测试输入:“1,2-3,4”即为第1,2至3,4张工作表),点确定。
7、最后得到如图示的效果。