Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5001|回复: 9

[已解决]按列拆分工作表

[复制链接]
发表于 2014-4-20 13:46 | 显示全部楼层 |阅读模式
Book1.rar (6.97 KB, 下载次数: 16)
发表于 2014-4-20 15:00 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. On Error Resume Next
  3. Dim arr, d, i&
  4. Set d = CreateObject("scripting.dictionary")
  5. arr = Range("a3").CurrentRegion
  6. Application.ScreenUpdating = False
  7. Application.DisplayAlerts = False
  8. For i = Sheets.Count To 1 Step -1
  9.     If Sheets(i).Name <> "数据" Then Sheets(i).Delete
  10. Next
  11. For i = 2 To UBound(arr)
  12.     If Not d.exists(arr(i, 2)) Then
  13.         d(arr(i, 2)) = ""
  14.         Sheet1.[b3].AutoFilter Field:=2, Criteria1:=arr(i, 2)
  15.         With Sheets.Add(after:=Sheets(Sheets.Count))
  16.             .Name = arr(i, 2)
  17.             Sheet1.[a:d].Copy [a1]
  18.         End With
  19.         Sheet1.ShowAllData
  20.     End If
  21. Next
  22. Sheet1.Activate
  23. [a3].AutoFilter
  24. Application.DisplayAlerts = True
  25. Application.ScreenUpdating = True
  26. End Sub
复制代码
回复

使用道具 举报

发表于 2014-4-20 15:01 | 显示全部楼层
增加了一行标题

Book1.zip

10.63 KB, 下载次数: 24

回复

使用道具 举报

发表于 2014-4-20 15:10 | 显示全部楼层
本帖最后由 跑跑2014 于 2014-4-20 15:20 编辑

用了筛选功能

如要有标题,直接把代码改为
Sub Macro1()
     Sheet2.Rows("1:65536").Delete
     Sheet3.Rows("1:65536").Delete
    d = Sheet1.Range("a65536").End(xlUp).Row
    Sheet1.Range("B:B").AutoFilter Field:=1, Criteria1:="内"
    Range("A1:D" & d).Copy Sheet2.Range("a1")
    Sheet1.Range("B:B").AutoFilter Field:=1, Criteria1:="外"
    Range("A1:D" & d).Copy Sheet3.Range("a1")
    Sheet1.Columns("B:B").AutoFilter
End Sub

可用.rar

13.9 KB, 下载次数: 15

点评

b列字段不确定,这些写不妥  发表于 2014-4-20 15:40
回复

使用道具 举报

 楼主| 发表于 2014-4-20 18:30 | 显示全部楼层
感谢大家非常好用,谢谢了
回复

使用道具 举报

 楼主| 发表于 2014-4-30 19:48 | 显示全部楼层
跑跑2014 发表于 2014-4-20 15:10
用了筛选功能

如要有标题,直接把代码改为

你好朋友
现在使用的代码就是您帮助写的
但是发现有点问题
当b列全是内的情况下
点击按钮外表格也是内的内容
也就是没有区分了
请您帮忙再修改一下
回复

使用道具 举报

发表于 2014-4-30 20:16 | 显示全部楼层
本帖最后由 跑跑2014 于 2014-4-30 21:00 编辑
shaokui123 发表于 2014-4-30 19:48
你好朋友
现在使用的代码就是您帮助写的
但是发现有点问题
Sub Macro1()
     Sheet2.Rows("1:65536").Delete
     Sheet3.Rows("1:65536").Delete
    d = Sheet1.Range("a65536").End(xlUp).Row
    Sheet1.Range("B:B").AutoFilter Field:=1, Criteria1:="内"
    Range("A1:D" & d).Copy Sheet2.Range("a1")
    Sheet1.Range("B:B").AutoFilter Field:=1, Criteria1:="外"
    Range("A1:D" & d).Copy Sheet3.Range("a1")
    Sheet1.Columns("B:B").AutoFilter
End Sub
用这段代码就不会发生那种情况 了。

回复

使用道具 举报

 楼主| 发表于 2014-4-30 21:15 | 显示全部楼层
跑跑2014 发表于 2014-4-30 20:16
Sub Macro1()
     Sheet2.Rows("1:65536").Delete
     Sheet3.Rows("1:65536").Delete

朋友,确实是存在问题
当数据表中b列全是单一数值的时候,比如全是内
那么外的表格中就把所有的数值全部复制了过去
我刚刚把附件下载了又重新测试了一遍,还是有问题


回复

使用道具 举报

发表于 2014-4-30 21:20 | 显示全部楼层
本帖最后由 跑跑2014 于 2014-4-30 21:25 编辑
shaokui123 发表于 2014-4-30 21:15
朋友,确实是存在问题
当数据表中b列全是单一数值的时候,比如全是内
那么外的表格中就把所有的数值全部 ...


改为 Sheet2.Rows("1:65536").Delete
     Sheet3.Rows("1:65536").Delete
     Sheet1.Rows("1:1").Insert
    d = Sheet1.Range("a65536").End(xlUp).Row
    Sheet1.Range("B:B").AutoFilter Field:=1, Criteria1:="内"
    Sheet1.Range("A1:D" & d).Copy Sheet2.Range("a1")
    Sheet1.Range("B:B").AutoFilter Field:=1, Criteria1:="外"
    Sheet1.Range("A1:D" & d).Copy Sheet3.Range("a1")
    Sheet1.Rows("1:1").Delete
    Sheet2.Rows("1:1").Delete
    Sheet3.Rows("1:1").Delete
其时要是有标头用第二段代码

回复

使用道具 举报

 楼主| 发表于 2014-4-30 21:34 | 显示全部楼层
跑跑2014 发表于 2014-4-30 21:20
改为 Sheet2.Rows("1:65536").Delete
     Sheet3.Rows("1:65536").Delete
     Sheet1.Rows("1:1"). ...

你好朋友
这次正常了
测试中
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 05:11 , Processed in 0.336974 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表