资源描述
使用ExcelVBA代码实现表格拆分功效
作者: 张辛
【摘要】
因为工作需要, 我们常常期望能把部分表格根据某个分类进行拆分, 根据正常做法应该是: 先按分类项筛选, 然后新建工作表, 接着将筛选结果复制到新工作表上, 随即再修改工作表标署名称, 最终依次反复这项工作, 直到把分类项中每一个选项都复制一遍, 这份工作表才算拆分完成。这种反复性工作太花费时间, 有没有措施能帮我们快速完成这种体力活呢?
【正文】
假如使用Excel VBA宏代码帮我们判定并拆分, 则大大减轻工作量。下面就给大家介绍一个案例, 期望能带来启发。
一、 案例描述
以下图所表示, 有一张销售订单表, 现在期望根据【产品】进行拆分, 将每个城市数据单独放在一张新工作表上。
完成后我们看到结果是销售订单表【sheet1】被拆分成9张产品表。以下图所表示:
二、 Excel VBA代码编程说明
打开编程环境
首先需要调出开发工具选项卡, 打开【文件】-【选项】-【自定义功效区】, 勾选【开发工具】
单击【开发工具】选项卡中【Visual Basic】
右键单击【模块】, 选择【插入】-【模块】
双击新建模块, 进入代码编辑区。
编写代码
将拆分工作表代码贴入编辑区, 以下图所表示:
具体代码信息参考以下:
Sub 使用高级筛选拆分表格()
Dim a As String
Dim b As Integer, c As Integer
b = WorksheetFunction.CountA(Sheets("sheet1").Range("I2:I100"))
Sheets("sheet1").Range("k1") = Sheets("sheet1").Range("i1")
For c = 1 To b
Sheets("sheet1").Range("k2") = Sheets("sheet1").Range("I" & c + 1).Value
Sheets.Add After:=ActiveSheet
a = Sheets("sheet1").Range("k2").Value
ActiveSheet.Name = a
Application.CutCopyMode = False
Sheets("Sheet1").Range("A1:G231").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("Sheet1").Range("K1:K2"), CopyToRange:=Sheets(a).Range("A1"), _
Unique:=False
Next c
Sheets("sheet1").Range("k1:k2").Clear
Sheets("sheet1").Select
End Sub
三、 应用宏代码完成工作
设置拆分依据
代码中定义工作表【sheet1】中I列为拆分依据, 所以要将分类项复制粘贴到I列。然后使用【数据】-【删除反复项】命令, 将反复数据删除。
运行宏代码
单击【开发工具】-【宏】, 打开宏编辑对话框, 选中“使用高级筛选拆分表格”, 单击【实施】即可。
【小提醒】: 包含宏代码Excel文件, 要保留成.xlsm格式, 才能将代码保留下来。假如保留成.xlsx格式, 代码将被自动删除。
展开阅读全文