1、分别有工作表1、2、3、4,数据如下图示:
2、按ALT+F11打开VBE编辑器,在工程窗口下的Microsoft Excel对象右键-插入-模块,新建一个模块1。
3、粘贴如下代码:Option ExplicitSub columncopy()Dim c As String, sh As Worksheet, i As Integer, flag As Boolean, b As String, arr, l As Integer, j As Integer, min As Integer, max As Integerflag = Falsec = InputBox("请输入列号,如:A、B、C……", "列号输入(请输入大写字母)")For i = 1 To Sheets.CountIf Sheets(i).Name = "第" & c & "列合并数据" Then flag = TrueNextIf flag = False ThenSet sh = Worksheets.Addsh.Name = "第" & c & "列合并数据"Sheets("第" & c & "列合并数据").Move after:=Sheets(Sheets.Count)End Ifb = InputBox("请指定需合并列的工作表,多张连续表请用“-”隔开,多张不连续表请用“,”隔开,如:1,2,3-5,6等。", "指定工作表(请输入数字)")arr = Split(b, ",", -1, vbTextCompare)If Sheets("第" & c & "列合并数据").Range("iv1").End(xlToLeft).Column = 1 Thenl = Sheets("第" & c & "列合并数据").Range("iv1").End(xlToLeft).ColumnElsel = Sheets("第" & c & "列合并数据").Range("iv1").End(xlToLeft).Column + 1End IfFor i = 0 To UBound(arr)If InStr(arr(i), "-") Then min = Split(arr(i), "-", -1, vbTextCompare)(0) max = Split(arr(i), "-", -1, vbTextCompare)(1) For j = min To max Sheets(j).Columns(c & ":" & c).Copy Destination:=Sheets("第" & c & "列合并数据").Cells(1, l) l = l + 1 Next jElse Sheets(CInt(arr(i))).Columns(c & ":" & c).Copy Destination:=Sheets("第" & c & "列合并数据").Cells(1, l) l = l + 1End IfNextEnd Sub
4、按ALT+F8打开宏对话框窗口,鼠标单击执行columncopy宏。
5、在弹出的“列号输入(请输入大写字母)”对话框中输入所需的列号(笔者测试输入:“B”列),点确定。
6、在弹出的“指定工作表(请输入数字)”对话框中按照要求输入所需的工作表(笔者测试输入:“1,2-3,4”即为第1,2至3,4张工作表),点确定。
7、最后得到如图示的效果。