VBA学习练习-拆分成多个工作簿

实际运用过程中,尤其是运营岗,经常收到一份总的报表,需要分区域下发,可以用以下VBA将数据按指定列拆分成多个工作簿

原理:

1、拆分成多个sheet

2、根据sheet建工作表并copy

3、删除sheet

Sub 拆分成多个工作簿()
'将报表按指定列分类并保存到各工作表中
Dim i, c As Long, bj As String, rng As Range, arr(), myrows, lc As Integer
Application.ScreenUpdating = False
Application.DisplayAlerts = False
myrows = Application.InputBox("请输入内容从第几行开始")    '分类处理的第一条记录在第几行
i = myrows
c = Application.InputBox("请输入拆分列号")
arr = Range("A1").CurrentRegion
lc = UBound(arr, 2)

bj = Worksheets(1).Cells(i, c).Value
Do While bj <> ""                                                 '直到成绩表中C列的单元格为空单元格时终止循环
    
    On Error Resume Next                                          '当没有对应工作表时,忽略下一行代码引起的运行错误
    If Worksheets(bj) Is Nothing Then                                                                   '判断是否已有工作表,没有就新建并写入表头
        Worksheets.Add after:=Worksheets(Worksheets.Count)
        ActiveSheet.Name = bj
        Worksheets(1).Cells(1, "A").Resize(myrows - 1, lc).Copy Worksheets(bj).Cells(1, "A")
    End If
    
    Set rng = Worksheets(bj).Range("A1048576").End(xlUp).Offset(1, 0) '确定班级工作表中A列的第一个空单元格,作为写入成绩记录的目标区域
    Worksheets(1).Cells(i, "A").Resize(, lc).Copy rng
    i = i + 1
    bj = Worksheets(1).Cells(i, c).Value
Loop

'MsgBox "已分类到各sheetta"

Dim folder As String
folder = ThisWorkbook.Path & "\新建文件夹"            		'保存工作簿文件的目录
If Len(Dir(folder, vbDirectory)) = 0 Then MkDir folder		'选择是否新建该文件夹
Dim sht As Worksheet
For Each sht In Worksheets
    sht.Copy												'复制工作表到工作簿
    ActiveWorkbook.SaveAs folder & "\" & sht.Name & ".xlsx"	'保存工作簿并命名
    ActiveWorkbook.Close
Next

Dim sht1 As Worksheet
For Each sht1 In Worksheets
    If sht1.Name <> Worksheets(1).Name Then
        sht1.Delete
    End If
Next

Application.ScreenUpdating = True
Application.DisplayAlerts = True
End Sub
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个示例的VBA代码,用于将Excel工作簿分成多个工作簿: ```vba Sub SplitWorkbook() Dim OriginalWorkbook As Workbook Dim NewWorkbook As Workbook Dim OriginalWorksheet As Worksheet Dim NewWorksheet As Worksheet Dim Cell As Range Dim RowCounter As Long Dim LastRow As Long Dim SplitColumn As Range Dim UniqueValues As Collection Dim Value As Variant ' 设置原始工作簿工作表 Set OriginalWorkbook = ThisWorkbook Set OriginalWorksheet = OriginalWorkbook.Worksheets("Sheet1") ' 替换为您要分的工作表名称 ' 设置分列范围 Set SplitColumn = OriginalWorksheet.Range("A:A") ' 替换为您要分的列 ' 获取唯一值集合 Set UniqueValues = New Collection On Error Resume Next For Each Cell In SplitColumn UniqueValues.Add Cell.Value, CStr(Cell.Value) Next Cell On Error GoTo 0 ' 遍历唯一值并创建新工作簿 For Each Value In UniqueValues ' 创建新工作簿并复制原始工作表的结构和数据 Set NewWorkbook = Workbooks.Add Set NewWorksheet = NewWorkbook.Worksheets(1) OriginalWorksheet.Copy Before:=NewWorksheet ' 删除除唯一值之外的行 With NewWorksheet LastRow = .Cells(.Rows.Count, 1).End(xlUp).Row For RowCounter = LastRow To 2 Step -1 ' 从最后一行开始往上遍历 If .Cells(RowCounter, 1).Value <> Value Then .Rows(RowCounter).Delete End If Next RowCounter End With ' 保存新工作簿 NewWorkbook.SaveAs "路径\" & Value & ".xlsx" ' 替换为您要保存的路径和文件名 ' 关闭新工作簿 NewWorkbook.Close SaveChanges:=False Next Value End Sub ``` 请注意,您需要根据实际情况进行以下修改: 1. 将`"Sheet1"`替换为您要分的工作表名称。 2. 将`"A:A"`替换为您要分的列范围。 3. 将`"路径\" & Value & ".xlsx"`替换为您要保存的路径和文件名。 运行此代码后,它将根据指定的列中的唯一值,将原始工作簿分为多个新的工作簿,并将每个唯一值命名为文件名。每个新工作簿将只包含与对应唯一值匹配的行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值