|
发表于 2013-5-21 22:18
|
显示全部楼层
本楼为最佳答案
楼主:是不是想要这样的?见附件!- Sub 工作薄总表拆分多工作表()
- Dim r%, j%, rng As Range, rngs As Range, sht As Worksheet, d As Object
- Application.DisplayAlerts = False '禁止弹出对话框
- Application.ScreenUpdating = False '屏蔽屏幕刷新
- Set zbst = Sheets("test") '以下可用zbst替代Sheets("sest")
- Set d = CreateObject("scripting.dictionary") '字典
- For Each rng In Range("a2:a" & zbst.[a65536].End(3).Row) 'rng遍历a列第2行及以下有数据单元格
- If Not d.exists(rng.Value) Then d.Add (rng.Value), Nothing 'a列第2行及以下数据去重复
- Next
- k5 = d.keys
- For Each sht In Sheets '遍历此薄下的所有工作表
- If sht.Name <> "test" Then sht.Delete '删除不是“test”的其他表格
- Next
- For Each na In d.keys '遍历字典里的内容
- Sheets.Add(, zbst).Name = na '新建字典中储存内容为名字的工作表
- zbst.Activate
- zbst.[a1:g1].Copy Sheets(na).[a1:g1] '复制标题
- For Each rangs In zbst.Range("a2:e" & zbst.[a65536].End(3).Row) 'rangs遍历a列第2行及以下有数据单元格
- If rangs.Value = na Then '如果rangs等于,就……
- r = r + 1 '计数,为下面写入单元格中数据时,行变化
- For j = 1 To 7 '为下面写入单元格中数据时,列变化
- Sheets(na).Cells(r + 1, 8 - j) = zbst.Cells(rangs.Row, 8 - j) '把满足条件数据写入表中
- Next
- End If
- Next
- r = 0 '为的是重新计数,满足条件的数据都能写入新表第二行
- Next
- Application.DisplayAlerts = True '恢复弹出对话框
- Application.ScreenUpdating = True '屏幕刷新
- MsgBox "总表拆分完成!", 64 '弹出总表拆分完成!对话框
- End Sub
复制代码 |
|