excel-宏

按alt+f11进入宏,新建模块, f5执行

'用来对EXCEL进行自动分表,分成原表+序号,第一行表头全部复制,其他数据按需要分到相应的表中
Sub SperateEveryHundredRow()

    '定义分割后的表除表头外有多少行
    Dim EveryRow As Integer
    EveryRow = 500

    'bookName : 主工作簿名(temp)
    Dim BookNameTemp As String
    BookNameTemp = Windows.Application.ActiveWorkbook.Name


    Dim BookName
    BookName = Left(BookNameTemp, InStr(BookNameTemp, ".") - 1)

    '主工作表名
    Dim tableName As String
    tableName = ActiveSheet.Name()

    '主表的行数,这里有可能无法运算出来,需要手动填写实际表格的行数
    Dim tableRows As Integer
    tableRows = ActiveSheet.Range("A65535").End(xlUp).Row

    '分表的个数,这里有点问题,没有ceil函数,无法进行上浮运算
    Dim tableNumber As Integer
    tableNumber = Int(tableRows / EveryRow)

         '从第一个分表开始,至到把所有的表填充完毕
         For Index = 1 To tableNumber

          Dim newBookName As String
          newBookName = BookName & "-" & Index

           '  Workbooks.Add.Name(newBookName)
           '下面添加一个工作表,用工作簿+序号的命名方式

           Dim insertTable As Boolean
           insertTable = addWorkSheetCopyFirstRow(tableName, newBookName)

         'startRowEvery:开始复制的行数,最后的加一为了隔开表头
          Dim startRowEvery As Integer
          startRowEvery = (Index - 1) * EveryRow + 1 + 1

          'endRowEvery:结束复制的行数,最后的加一为了隔开表头
          Dim endRowEvery As Integer
          endRowEvery = startRowEvery + EveryRow - 1

           '复制EveryRow行
           Worksheets(tableName).Activate
            Rows(startRowEvery & ":" & endRowEvery).Select
            Selection.Copy

                  Sheets(newBookName).Activate

                  Rows(2).Select
                  ActiveSheet.Paste

                 Sheets(tableName).Activate

        Next

End Sub
'函数addWorkSheetCopyFirstRow(tableName,sName)用来新建一个以sName的工作表,并且将tableName工作表的第一行复制到新工作表的第一行
Function addWorkSheetCopyFirstRow(ByVal tableName As String, ByVal sName As String) As Boolean

    addWorkSheetCopyFirstRow = False

    '插入制定名称的工作表
    Worksheets.Add.Name = sName

    Debug.Print "创建新工作表"; sName; "成功"

    '选中主表的第一行
     Worksheets(tableName).Activate
     Rows(1).Select
    '复制选中的第一行
    Selection.Copy

    '选中新建表的第一行
    Sheets(sName).Activate
    Rows(1).Select
    '粘贴
    ActiveSheet.Paste

    addWorkSheetCopyFirstRow = True
    Worksheets(tableName).Activate '最后将当前活动工作表还原为主表

    Debug.Print "已经复制第一行到"; sName; "工作表"

End Function
Sub Final()
    Dim sht As Worksheet
    Dim MyBook As Workbook
    Set MyBook = ActiveWorkbook
    For Each sht In MyBook.Sheets
        sht.Copy
        ActiveWorkbook.SaveAs Filename:=MyBook.Path & "\" & sht.Name, FileFormat:=xlNormal     '???????EXCEL????
        ActiveWorkbook.Close
    Next
    MsgBox "Congratuations! Save worksheets to workbooks completed."
End Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值