以前做了几个合并工作表的示例,大多可根据要求实现,当工作过程中再次应用的时候,发现以前的内容有点不适合,由于工作表结构变化,其使用过程中出了一些并不符合的现象。

实现流程

本节将利用vba代码,实现从多个工作薄中提取所有不为空表的工作表,合并到一个新建工作表中,实现多表合一。

可以实现工作表汇总,把各分部汇总的表统一进行整合的场景下,使用更加方便。

合并之后如下图所示:

合并的前提是工作表结构要相同,当然,不相同也可以,可能再次进行计算处理的时候,要进行修整操作。

本示例进行的是一个傻瓜式合并,也就是不管三七二十一,进行数据追加合并,不会考虑工作表的结构是否一致。

当然了,空表是不会合并的,代码中进行了一筛选。

代码

代码是整个操作的一个灵魂,如果完整理解了代码中的过程方法,那么就对工作表合并有了一个基本认识。

执行入口

Private Sub JoinSheet() Application.Caption = "江觅" Dim NewWork As Workbook, xName As String xName = Application.InputBox("输入工作薄名称", "合并工作表", VBA.Format(VBA.Date, "yyyymmdd") & VBA.Format(VBA.Time, "hhmm")) If VBA.Len(xName) = 0 Then Exit Sub If xName = False Then Exit Sub Set NewWork = Application.Workbooks.Add() NewWork.SaveAs ThisWorkbook.Path & "" & xName & ".xlsx" Dim si As Integer With Application.FileDialog(msoFileDialogFilePicker) If .Show = -1 Then .Filters.Clear .Filters.Add "Excle文件", "*.xls;*.xlsx" .AllowMultiSelect = True For si = 1 To .SelectedItems.Count '遍历打开工作表 SelectCopySheet .SelectedItems(si), NewWork Next si MsgBox xName & VBA.vbCrLf & "复制完成。", vbInformation, "成功" End If End With End Sub

循环

遍历要复制的工作表,并调用合并函数

Public Sub SelectCopySheet(xWorkName As String, NewWork As Workbook) '选择工作表,调用复制表内容函数 On Error Resume Next Dim s As Workbook Application.Workbooks.Open xWorkName Set s = ActiveWorkbook Dim xSheet As Worksheet, R As Range For Each xSheet In s.Worksheets Set R = CheckIsBlack(xSheet) If Not R Is Nothing Then '如果不是空表 CopySheetToNewSheet R, NewWork '复制工作表 End If Next xSheet s.Close Set R = Nothing Set xSheet = Nothing Set s = Nothing End Sub

追加复制

Public Sub CopySheetToNewSheet(R As Range, NewWork As Workbook) '追加复制内容到新工作表 On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False Dim xSheet As Worksheet Dim wr As Integer, wc As Integer Set xSheet = NewWork.Worksheets(1) wr = xSheet.UsedRange.Rows.Count + 1 wc = xSheet.UsedRange.Columns.Count If wr = 2 Then wr = 1 xSheet.Cells(wr, 1).Select R.Copy xSheet.Cells(wr, 1).PasteSpecial xlPasteAll NewWork.Save Set xSheet = Nothing Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub

整个过程实现后可以得到一个新工作薄,工作薄名称以日期和日期合并得到字符,也可根据自己实际情况进行修改。

欢迎关注、收藏

---END---