使用VBA将一个EXCEL大表自动分成一系列小表(保留首行)

来源:互联网 发布:2016广联达软件购买 编辑:程序博客网 时间:2024/05/03 19:11

   最近工作中需要将一个4万行的大EXCEL表格分成一系列小表格,每个小表格500行。如果手工操作,工作量巨大;根据之前写的将excel表格自动筛选为一系列表格的原理,这里进行了vba自动代码的编写,下面粘贴如下:

'用来对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
'Final宏用来将工作表转化为工作簿,在执行完上述操作后执行本次操作,在源工作簿目录下生成一系列的和源工作簿命名格式相似的工作簿。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


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 导师回复跟敷衍怎么办 在演讲时紧张怎么办 老房子怎么办不动产证 脚角质层厚粗糙怎么办 皮革包染色了怎么办 皮革包被染色了怎么办 面膜泥干了怎么办 淘宝店铺生意不好怎么办 淘宝商品换主图被下架了怎么办 壁纸店没生意怎么办 支付宝不能借钱怎么办 淘宝号想注销怎么办 被陌生号码骚扰怎么办 买家辱骂卖家怎么办 淘宝禁止创建店铺怎么办 闲鱼上买东西被骗了怎么办 恶意买家付款了怎么办 换手机号了淘宝怎么办 旺旺发不了图片怎么办 拼多多买家投诉怎么办 拼多多恶意用户怎么办 淘宝运单号填错了怎么办 淘宝退货卖家不处理怎么办 淘宝长时间不发货怎么办 实体店卖假货怎么办 淘宝店暂停服务怎么办 淘宝直播开始没人怎么办 店铺违规虚假交易怎么办 电视无频道信息怎么办 hdp直播频道丢失怎么办 小红书订单删了怎么办 退款售后删除我怎么办 毛衣袖子肥了怎么办 店面生意不好要怎么办 中国的农民以后怎么办 做到不好的梦怎么办 美瞳线眼睛肿了怎么办 淘宝买家限购怎么办 一楼房屋潮湿怎么办 一楼屋子潮湿怎么办 淘宝店铺销量不好怎么办