EXCEL VBA创建sheet/工作簿

1.需要创建以地市命名的系列sheet,但不想手动创建改名。

sheet名称
代码实现如下:

    Sub SheetAdd()
    
    Dim i As Long
    
    '定义一个长整型变量
    
    Sheets.Add After:=Sheets(Sheets.Count), Count:=Sheets(1).Range("A" & Rows.Count).End(xlUp).Row - 1
    
    '在现有Sheet后新建工作表,工作表数量等于Sheet(1)表A列非空单元格行数
    
    For i = 2 To Sheets.Count
    
    Sheets(i).Name = Sheets(1).Cells(i, 1).Value
    
    '工作表名称设置为Sheet(1)A列单元格值
    
    Next
    
    MsgBox "创建工作表完成!"
    
    End Sub

完成后如图:
创建完成图

2.那么,创建完成后需要把系列sheet分离成独立的工作簿该如何呢,

VBA实现代码如下:

    Sub 拆分工作簿()
    
    Dim sht As Worksheet '定义一个工作表变量 sht
    
    Dim mybook As Workbook '定义一个工作簿变量 mybook
    
    Application.ScreenUpdating = False '关闭屏幕更新:作用为加快宏的执行速度,这样将看不到宏的执行过程,但宏的执行速度加快了。
    
    Set mybook = ActiveWorkbook '将当前工作簿赋值给变量 mybook
    
    For Each sht In mybook.Sheets ' FOR 循环实现将工作簿中的多个工作表拆开成以工作表名称命名的工作簿并保存在原工作簿相同的路径中
    
    sht.Copy
    
    ActiveWorkbook.SaveAs Filename:=mybook.Path & "\" & sht.Name, FileFormat:=xlNormal
    
    ActiveWorkbook.Close
    
    Next
    
    Application.ScreenUpdating = True '恢复屏幕刷新 ,屏幕刷新 False /True 需成对出现 。
    
    MsgBox "工作簿已经拆分完毕"
    
    End Sub

完成如图:
拆分工作簿完成图

3.以上两个步骤可以归纳为:按指定名称批量创建Excel工作簿。

需要创建指定名字的工作簿
VBA代码实现如下:

    Sub Createwks()
    
        Dim i&, p$, r
    
        Application.ScreenUpdating = False
    
        '取消屏幕刷新
    
        Application.DisplayAlerts = False
    
        '取消警告提示,当有重名工作簿时直接覆盖
    
        p = ThisWorkbook.Path & "\"
    
        '当前工作簿所在的路径
    
        r = [a1].CurrentRegion '数据装入数组r
    
        For i = 2 To UBound(r)
    
        '标题不要,因此从第2个元素开始遍历数组r
    
            With Workbooks.Add '新建工作簿
    
                .SaveAs p & r(i, 1), xlWorkbookDefault
    
                '保存工作簿
    
                .Close True
    
                '关闭工作簿
    
            End With
    
        Next
    
        Application.ScreenUpdating = True
    
        Application.DisplayAlerts = True
        MsgBox "工作簿已经创建完毕"
    
    End Sub

完成后如图:
创建工作簿

  • 13
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个示例的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"`替换为您要保存的路径和文件名。 运行此代码后,它将根据指定的列中的唯一值,将原始工作簿拆分为多个新的工作簿,并将每个唯一值命名为文件名。每个新工作簿将只包含与对应唯一值匹配的行。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值