使用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
- 使用VBA将一个EXCEL大表自动分成一系列小表(保留首行)
- split 命令(将一个大文件根据行数平均分成若干个小文件)
- 链表问题---将单向链表按某值划分成左边小,中间相等,右边大的形式
- 使用VBA将Excel工作表分割成多个文件
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
- linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件)
- VBA 自动导入文件夹中的EXCEL表
- Linux下的split 命令(将一个大文件根据行数平均分成若干个小文件) 及其他命令
- 使用VBA,20行代码 将Excel数据导出
- 将单向链表按某值划分成左边小,中间相等,右边大
- Linux下的split 命令——将一个大文件根据行数平均分成若干个小文件
- 将一个英文句子分成两行
- 【一步一步学习VBA】Excel VBA 在当前目录创建一个excel表
- LeetCode(37) Sudoku Solver
- 盎既靠晨酵掌栽谮么适构厦缸坪创儋偈忧什蹦
- http://www.52kk.com/space.php
- 历届试题 打印十字图 Java蓝桥杯
- 数据库第二次作业
- 使用VBA将一个EXCEL大表自动分成一系列小表(保留首行)
- Introduction to the t Distribution (non-technical)
- 数据库锁
- 【009】【JVM——类加载机制】
- [BZOJ1031][JSOI2007]字符加密Cipher && 后缀数组
- Gradle 修改 Maven 仓库地址
- 3.22第二次周赛总结
- MD5算法使用简析
- 调试的代码和调试的二进制文件要尽量一致