(本文版本office2016)

1.需要打开“开发工具”选项

2.定义宏

3.代码(文档最后)

4.执行

5.拆分完成

Excel 宏 将工作表中的数据按照顺序分拆到 本工作簿 的其他工作表_一个工作簿拆分多个工作表

 

Excel 宏 将工作表中的数据按照顺序分拆到 本工作簿 的其他工作表_ide_02

Excel 宏 将工作表中的数据按照顺序分拆到 本工作簿 的其他工作表_Excel_03

Excel 宏 将工作表中的数据按照顺序分拆到 本工作簿 的其他工作表_拆分工作簿_04

Excel 宏 将工作表中的数据按照顺序分拆到 本工作簿 的其他工作表_sed_05

Excel 宏 将工作表中的数据按照顺序分拆到 本工作簿 的其他工作表_一个工作簿拆分多个工作表_06

Excel 宏 将工作表中的数据按照顺序分拆到 本工作簿 的其他工作表_Excel_07

Sub CF()
     Dim myRange As Variant
     Dim myArray
     Dim titleRange As Range
     Dim title As Variant
     Dim columnNum As Integer
     myRange = Application.InputBox(prompt:="请选择标题行:", Type:=8)
     myArray = WorksheetFunction.Transpose(myRange)
     Set titleRange = Application.InputBox(prompt:="请选择拆分的表头,必须是第一行,且为一个单元格,如:“分公司”", Type:=8)
     title = titleRange.Value
     columnNum = titleRange.Column
     Application.ScreenUpdating = False
     Application.DisplayAlerts = False
     Dim i&, Myr&, Arr, num&
     Dim d, k
     For i = Sheets.Count To 1 Step -1
         If Sheets(i).Name <> "全司汇总" Then
           
         End If
     Next i
     Set d = CreateObject("Scripting.Dictionary")
     Myr = Worksheets("全司汇总").UsedRange.Rows.Count
     Arr = Worksheets("全司汇总").Range(Cells(2, columnNum), Cells(Myr, columnNum))
     For i = 1 To UBound(Arr)
         d(Arr(i, 1)) = ""
     Next
     k = d.keys
     For i = 0 To UBound(k)
         Set conn = CreateObject("adodb.connection")
         conn.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties=Excel 12.0;Data Source=" & ThisWorkbook.FullName
         Sql = "select * from [全司汇总$] where " & title & " = '" & k(i) & "'"
         Worksheets.Add after:=Sheets(Sheets.Count)
         With ActiveSheet
             .Name = k(i)
             For num = 1 To UBound(myArray)
                 .Cells(1, num) = myArray(num, 1)
             Next num
             .Range("A2").CopyFromRecordset conn.Execute(Sql)
         End With
         Sheets(1).Select
         Sheets(1).Cells.Select
         Selection.Copy
         Worksheets(Sheets.Count).Activate
         ActiveSheet.Cells.Select
         Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
         Application.CutCopyMode = False
     Next i
     conn.Close
     Set conn = Nothing
     Application.DisplayAlerts = True
     Application.ScreenUpdating = True
 End Sub