ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2194|回复: 2

如何使用VBA快速拆分大型工作表,采用filter方法!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-6-25 18:08 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 zhigangchen 于 2016-6-25 18:54 编辑

我在第一篇贴子里介绍了工作表拆分的方法,但是这种方法并不是最好的。特别是在拆分大型工作表时,比如工作表有几十万行,这时往往会卡死。于是,我想到如果能够模仿平时我们筛选过后,将结果复制到一个新的工作表的方法,是不是会更快些。经过测试,确实是这样的,时间只需要原来的几十分之一。以下是代码:
Sub 快速拆分工作表()
Dim t, d, arr As Variant, x&, k&, col_name$, col_num%, rows_start%, mypath$, sheet_name$
ThisWorkbook.Sheets(1).Activate
sheet_name = Application.InputBox("请输入要拆分的表格名称,如sheet1", 表格名称)
col_name = Application.InputBox("请输入拆分依据成员所在的列,如a", 输入列名称)
col_num = Range(col_name & 1).Column
rows_start = Application.InputBox("请输入标题行下开始的第一行号,如2", 输入开始行号)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Dim min
min = Timer
Set d = CreateObject("scripting.dictionary")
k = Sheets(sheet_name).UsedRange.CurrentRegion.Rows.Count - rows_start + 1
arr = Range(col_name & rows_start & ":" & col_name & k)
For x = rows_start + 1 To UBound(arr)
d(arr(x, 1)) = ""
Next x
If d.exists("") Then
d.Remove ""
End If
For Each t In d.keys
Workbooks.Add
mypath = ThisWorkbook.Path & "\" & sheet_name & "_" & "拆分出的表格\"
If Dir(mypath, vbDirectory) = "" Then
MkDir mypath
End If
Dim workbook_path As String
workbook_path = ThisWorkbook.Path & "\" & sheet_name & "_" & "拆分出的表格\" & _
sheet_name & "_" & t & ".xlsx"
ActiveSheet.Name = t
ThisWorkbook.Sheets(sheet_name).Rows(rows_start - 1).AutoFilter Field:=col_num, Criteria1:=t
ThisWorkbook.Sheets(sheet_name).UsedRange.Copy ActiveSheet.Cells(1, 1)
ActiveWorkbook.SaveAs workbook_path
ActiveWorkbook.Close
ThisWorkbook.Activate
Next t
Application.ScreenUpdating = True
ThisWorkbook.Sheets(sheet_name).Rows(rows_start - 1).AutoFilter
MsgBox "拆分完工作表,一共用时" & Timer - min & "秒!"
Application.Calculation = xlCalculationAutomatic
End Sub


vba拆分工作表-发布.zip

19.62 KB, 下载次数: 60

TA的精华主题

TA的得分主题

发表于 2016-7-8 16:57 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2016-8-29 16:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
太好用了!真棒!佩服之至!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-26 07:33 , Processed in 0.036810 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表