ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 11755|回复: 13

[求助] 如何将一表拆分为多表?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2012-9-9 10:13 | 显示全部楼层 |阅读模式
请问如何将一个表格,按G列内容分拆分为多个表格(新建一个工作薄),并且所拆分的表格与原表格保持一致的格式(包括行高、列宽),若“仓库”为空则在所有拆分的表上都保存该条记录,若G列仓库为同一仓库(为空也可视为同一仓库),则不拆分,最后将仓库名按工作表分别填列在C3单元格。谢谢!
一表分多表.rar (14.21 KB, 下载次数: 342)

TA的精华主题

TA的得分主题

发表于 2012-9-9 10:33 | 显示全部楼层
  1. Sub ts()
  2.     Dim i&, j&, k&, ar, d As Object, dk, rng As Range
  3.     For i = Sheets.Count To 2 Step -1
  4.        Sheets(i).Delete
  5.     Next i
  6.     Set d = CreateObject("Scripting.Dictionary")
  7.     ar = [A6].CurrentRegion
  8.     For i = 2 To UBound(ar)
  9.         d(ar(i, 7)) = ""
  10.     Next i
  11.     dk = d.keys
  12.     For j = 0 To d.Count - 1
  13.         If Len(dk(j)) > 0 Then
  14.             Sheets("Sheet1").Copy after:=Sheets(Sheets.Count)
  15.             With ActiveSheet
  16.                 .Name = dk(j)
  17.                 .[C3] = dk(j)
  18.                 For k = 7 To UBound(ar) + 5
  19.                     If Len(.Cells(k, 7).Value) Then
  20.                         If .Cells(k, 7).Value <> dk(j) Then
  21.                             If rng Is Nothing Then
  22.                                 Set rng = .Cells(k, 7)
  23.                             Else
  24.                                 Set rng = Union(rng, .Cells(k, 7))
  25.                             End If
  26.                         End If
  27.                     End If
  28.                 Next k
  29.                 rng.EntireRow.Delete
  30.                 Set rng = Nothing
  31.             End With
  32.         End If
  33.     Next j
  34.     Set d = Nothing
  35. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2012-9-9 10:34 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
附件……………………………………

一表分多表-hustnzj.rar

40.29 KB, 下载次数: 499

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-9 10:59 | 显示全部楼层
谢谢hustnzj, 现在还有一个问题 如果我是希望拆分的工作表新建成为一个工作薄,按现在的VBA ,如果我的工作薄里面有多个表的话 ,其他的表就都被下面的语句给删除了,
For i = Sheets.Count To 2 Step -1
       Sheets(i).Delete
    Next i
另外,新建的工作表的序号应该重新排列,谢谢

TA的精华主题

TA的得分主题

发表于 2012-9-9 11:59 | 显示全部楼层
w_hb 发表于 2012-9-9 10:59
谢谢hustnzj, 现在还有一个问题 如果我是希望拆分的工作表新建成为一个工作薄,按现在的VBA ,如果我的工作 ...

楼主,到底是要新建工作簿,还是工作表?如果是工作簿,“新建的工作表的序号应该重新排列”这个就不成立了……

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-9 12:11 | 显示全部楼层
我是希望将待拆分的工作表,拆分为多个表后保存到一个新建的工作薄里面,然后在每个工作表的A列重新填列序号(因原始工作表已经按B列排序了,故这里只需要在A列重新填写序号1、2、3、4、5.........就可以了

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-10 22:14 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-9-9 21:43 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-9-12 13:25 | 显示全部楼层
w_hb 发表于 2012-9-10 22:14
继续顶起,期待更好的解决方案中............
  1. Sub ts()
  2.     Dim i&, j&, k&, ar, d As Object, dk, rng As Range, wb As Workbook
  3.     Set d = CreateObject("Scripting.Dictionary")
  4.     ar = [A6].CurrentRegion
  5.     For i = 2 To UBound(ar)
  6.         d(ar(i, 7)) = ""
  7.     Next i
  8.     dk = d.keys
  9.     Set wb = Workbooks.Add(xlWBATWorksheet)
  10.     For j = 0 To UBound(dk)
  11.         If Len(dk(j)) > 0 Then
  12.             ThisWorkbook.Sheets("Sheet1").Copy after:=wb.Sheets(wb.Sheets.Count)
  13.             With ActiveSheet
  14.                 .Name = dk(j)
  15.                 .[C3] = dk(j)
  16.                 For k = 7 To UBound(ar) + 5
  17.                     If Len(.Cells(k, 7).Value) Then
  18.                         If .Cells(k, 7).Value <> dk(j) Then
  19.                             If rng Is Nothing Then
  20.                                 Set rng = .Cells(k, 7)
  21.                             Else
  22.                                 Set rng = Union(rng, .Cells(k, 7))
  23.                             End If
  24.                         End If
  25.                     End If
  26.                 Next k
  27.                 rng.EntireRow.Delete
  28.                 Set rng = Nothing
  29.                 .[A7] = 1
  30.                 .[A7].AutoFill Destination:=.[A7].Resize(.Cells(Rows.Count, 1).End(3).Row - 6, 1), Type:=xlFillSeries
  31.             End With
  32.         End If
  33.     Next j
  34.     Application.DisplayAlerts = False
  35.     wb.Sheets(1).Delete
  36.     Application.DisplayAlerts = True
  37.     Set d = Nothing
  38.     Set wb = Nothing
  39. End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-9-12 13:25 | 显示全部楼层
附件………………

一表分多表-hustnzj.zip

48.17 KB, 下载次数: 448

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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 04:44 , Processed in 0.038345 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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