使用vba把一个工作簿的多个sheet拆分成两个sheet为一个工作簿的多个工作簿

假如一个工作簿有10个sheet,一下代码就是把10个sheet拆分成两个工作簿,一个工作簿有2个sheet,并且包含原sheet的数据

Sub SplitWorksheet()
'定义对话框变量
Dim cc As FileDialog
Set cc = Application.FileDialog(msoFileDialogFilePicker)
Dim newwork As Workbook
Dim num As Integer
With cc
    If .Show = -1 Then
        Dim vrtSelectedItem As Variant
        For Each vrtSelectedItem In .SelectedItems
            Dim tempwb As Workbook
            Set tempwb = Workbooks.Open(vrtSelectedItem)
            
            '获取需拆分文件的工作表数量
            num = tempwb.Sheets.Count
            '获取需拆分文件的路径
            ipath = tempwb.Path & "\"
            
            For i = 1 To num
                
                '如果对2取余为0,执行以下代码
                If (i Mod 2 = 0) Then
                    
                    Set sht = Worksheets(i - 1)
                    '新建一个新的工作簿
                    Set newwork = Workbooks.Add
                    
                    '把需拆分的第一个工作簿的奇数工作表工作表复制到第二个工作簿的第一个sheet
                    tempwb.Worksheets(i - 1).Copy before:=newwork.Worksheets(1)
                    '把需拆分的第一个工作簿的偶数工作表工作表复制到第二个工作簿的第一个sheet
                    tempwb.Worksheets(i).Copy before:=newwork.Worksheets(2)
                    
                    '不知道什么原因,第一个工作簿的sheet会出现一点小问题,没有具体调查
                    '只是使用了一个方法去解决
                    
                    '把第三个sheet名修改成别的名字
                    '第一个sheet名需取拆分文件的第一个sheet名
                    If (i <= 2) Then
                        Worksheets(3).Name = "sheet3"
                        Worksheets(1).Name = sht.Name
                    End If

                    
                    '关闭弹框
                    Application.DisplayAlerts = Fals
                    
                    '保存文件到某个路径,和文件名 xlsx格式 加上下面注释的,True为xls格式
                    
                    ActiveWorkbook.SaveAs ipath & sht.Name ',True
                    
                    '删除第三个sheet
                    Sheets(newwork.Worksheets(3).Name).Delete
                    
                    '关闭指定工作簿
                    Workbooks(newwork.Name).Close savechanges:=True
                End If
            Next i
            tempwb.Close savechanges:=False
            MsgBox "工作表已拆分完毕到  " & ipath & "    路径下,请确认!"
        Next vrtSelectedItem
    End If
End With
Set cc = Nothing

End Sub

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值