使用VBA将Excel工作表分割成多个文件
问题描述
有一个表格,具体数据如下图所示。这里需要按城市(即B列数据)对表格进行拆分,拆分出多个以城市名称命名的xlsx文件,每个xlsx文件都只包含当前城市的数据。
相关资料
之前没有接触过Excel相关的编程,也没有学习过VB语言,完全是摸着石头过河。在这里把期间使用过的一些资料罗列下,方便以后再次用到的时候,可以快速再捡起来。
Excel 2007 VBA Macro Programming
这个是英文版的电子书,当初在皮皮书屋(皮皮书屋是好东西,你懂的)上随便找的,做为我VBA的入门书籍。主要从这本书里学习了VBA的对象模型,几个常用的对象,Application、Workbook、Worksheet、Range。这本书有个好的地方就是在书的后面有个索引,可以快速地查看自己想了解的内容。这本书也有个大的缺陷,就是内容讲得还不够详细具体,往往找到了自己想了解的内容,想深入了解下各种操作,结果发现它讲完了。在线教程
这是个非常好的网站,里面包含了很多简单的例子及代码。当想要实现某个简单地操作的时候,可以先到这里来找找看有没有相应的实例。有一点搞不明白的就是,明明是中文网站,怎么贴的图片里的Excel都是日文的(好吧,不深究了)。对于新手来说非常有用,推荐之。Excel函数在线查询
最权威的Excel函数查询网站,好吧,其实就是微软的MSDN啦。虽然说MSDN的文档有时候的确搞不清楚它在讲什么,但是它还是最详细的。代码
好吧,不废话了,直接上代码。
'输入用户想要拆分的工作表
Dim sheet_name
sheet_name = Application.InputBox("请输入拆分工作表的名称:")
Worksheets(sheet_name).Select
'输入获取拆分需要的条件列
Dim col_name
col_name = Application.InputBox("请输入拆分依据的列号(如A):")
'输入拆分的开始行,要求输入的是数字
Dim start_row As Integer
start_row = Application.InputBox(prompt:="请输入拆分的开始行:", Type:=1)
'暂停屏幕更新
Application.ScreenUpdating = False
'工作表的总行数
Dim end_row
end_row = Worksheets(sheet_name).Range("A65536").End(xlUp).Row
'遍历计算所有拆分表,每个拆分表的格式为"表名称,表行数"
'对于二维数组,ReDim只能扩充最后一维,因此sheet_map行不变,扩充列
Dim sheet_map(), sheet_index
ReDim sheet_map(1, 0)
sheet_map(0, 0) = Range(col_name & start_row).Value
sheet_map(1, 0) = 1
sheet_index = 0
With Worksheets(sheet_name)
Dim row_count, temp, i
row_count = 0
For i = start_row + 1 To end_row
temp = Range(col_name & i).Value
If temp = Range(col_name & (i - 1)).Value Then
sheet_map(1, sheet_index) = sheet_map(1, sheet_index) + 1
Else
ReDim Preserve sheet_map(1, sheet_index + 1)
sheet_index = sheet_index + 1
sheet_map(0, sheet_index) = temp
sheet_map(1, sheet_index) = 1
End If
Next
End With
'根据前面计算的拆分表,拆分成单个文件
Dim row_index
row_index = start_row
For i = 0 To sheet_index
Workbooks.Add
'创建最终数据文件夹
Dim dir_name
dir_name = ThisWorkbook.Path & "\拆分出的表格\"
If Dir(dir_name, vbDirectory) = "" Then
MkDir (dir_name)
End If
'创建新工作簿
Dim workbook_path
workbook_path = ThisWorkbook.Path & "\拆分出的表格\" & sheet_map(0, i) & ".xlsx"
ActiveWorkbook.SaveAs workbook_path
ActiveSheet.Name = sheet_map(0, i)
'激活当前工作簿,ThisWorkbook表示当前跑代码的工作簿
ThisWorkbook.Activate
'拷贝条目数据(即最前面不需要拆分的数据行)
Dim row_range
row_range = 1 & ":" & (start_row - 1)
Worksheets(sheet_name).Rows(row_range).Copy
Workbooks(sheet_map(0, i) & ".xlsx").Sheets(1).Range("A1").PasteSpecial
'拷贝拆分表的专属数据
row_range = row_index & ":" & (row_index + sheet_map(1, i) - 1)
Worksheets(sheet_name).Rows(row_range).Copy
Workbooks(sheet_map(0, i) & ".xlsx").Sheets(1).Range("A" & start_row).PasteSpecial
row_index = row_index + sheet_map(1, i)
'保存文件
Workbooks(sheet_map(0, i) & ".xlsx").Close SaveChanges:=True
Next
'进行屏幕更新
Application.ScreenUpdating = True
MsgBox "拆分工作表完成"
End Sub
![](/assets/blank.gif)
![](/assets/blank.gif)
使用VBA将Excel工作表分割成多个文件相关推荐
- 用VBA摇滚Excel工作表
VBA (Visual Basic for Applications) is widely used for automating MS-Office products. Most of the ti ...
- 用VBA去除Excel工作表保护密码
今天帮同事解决个EXCEL问题,现记在这,以作备忘 现象: 想要修改保护单元 格的内容,在使用"工具"菜单"保护"子菜单的"撤消工作表保护" ...
- VBA添加Excel工作表
看到这个题目,很多人可能会说:添加工作表需要解释吗?连VBA小白都会用呀!没错,大家可能经常用到,但是大家是否都知道下面的用法呢,可能还真不一定呦! VBA添加工作表的代码看起来确实很简单. Work ...
- vb整合多个excel表格到一张_[Excel]同一工作簿中多个工作表保存成独立的表格
一个工作簿中有多个表格,如何将其表格单独保存成一个独立的文档呢? 如果表格少,操作如下:选中要导出表格的标签名--鼠标邮件--移动或复制表格--新建工作簿. 当如果表格太多呢,以上方法就太罗嗦了. 简 ...
- 表格拆分的两种方式 拆分成多个excel工作表或多个excel文件
表格拆分的两种方式 拆分成多个excel工作表或多个excel文件 拆分Excel,可以分为3种层次:拆分excel单元格:拆分成多个excel工作表:拆分成多个excel文件 其中,第1种拆分是无法 ...
- vba ado返回集合_利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总
大家好,今天继续讲解<VBA数据库解决方案>,今日讲解的是第37讲,利用ADO,实现同一文件夹下多个EXCEL工作表的数据汇总.最近的内容实用性比较强,如今日的内容,只把需要汇总的EXCE ...
- VBA中使用EXCEL工作表函数
EXCEL的VBA有两个函数库,一个是VBA的函数库,另一个是EXCEL工作表函数,也就是我们在单元格中使用的函数,两个函数库不是完全一样的.例如FIND(),VLOOKUP(),在VBA的函数库中是 ...
- 用python将一个excel工作表根据条件拆分成多个工作表(只用openpyxl库)
用python将一个excel工作表根据条件拆分成多个工作表(只用openpyxl库) 最近在学python,刚刚了解了openpyxl库,就想写点实用的功能.比如按某列值拆分工作表. 先放代码 fr ...
- Excel如何将一张工作表拆分成多个工作表Sheet?
工作中我们经常会遇到这种情况,所有的数据都整合在一个Excel表格里面了,现在想按需求分别拆分成多个工作表,有什么好办法吗?利用透视表,我们就可以轻松解决. 如下图所示,从销售一部到销售七部的所有业绩 ...
最新文章
- 2. VS使用---HelloWorld
- CSDN安全设置需改进
- vagrant,流浪汉,我又来啦。
- mysql 攻击密码_MySQL用户Root密码为弱口令的攻击
- Java多线程面试题与答案
- Spring MVC 流程图解析
- 百度贴吧发帖软件_贴吧自动发帖软件
- HDU1860 统计字符【水题+输入输出】
- 关于大型网站技术演进的思考(十四)--网站静态化处理—前后端分离—上(6)...
- hadoop组件及其作用
- 解决BT5不能上网的问题
- 计算机信息处理技术的易混淆知识点,【考试经验】计算机等级考试二级VisualFoxPro笔试易混淆的知识点...
- linux md5加密文件,linux md5 加密字符串和文件方法
- 2022/03/03js作业第一个不同宽度变色第二个是输入几年几月几日判断是今年的第几天(不算闰年2月为28日)
- Neo4j CQL基础
- 分解质因数 C语言实现
- tab吸顶功能实现,css实现沾性吸顶,sticky实现吸顶,解决sticky吸顶失效
- 数据库在网站中的作用
- 【2018年总】——感谢遇见,感谢拥有,感谢失去
- 如何将日语在线翻译成中文