前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA Excel总表以某列数据为基础拆分为独立文件的表,也可以拆分为独立的sheet表不导出!!

VBA Excel总表以某列数据为基础拆分为独立文件的表,也可以拆分为独立的sheet表不导出!!

作者头像
一线编程
发布2019-07-22 11:47:11
1.6K0
发布2019-07-22 11:47:11
举报
文章被收录于专栏:办公魔盒

VBA Excel总表以某列数据为基础拆分为独立文件的表,也可以拆分为独立的sheet表不导出!!




Sub 总表拆分成多个文件工作表()

Dim Arr, Rng As Range, Sht As Worksheet, Dic As Object

Dim k, t, Str As String, i As Long, lc As Long

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

Dim iuser

iuser = Environ("username")

ipath = "C:\Users\" & iuser & "\Desktop" & "\已拆分的数据表"

Set FSO = CreateObject("Scripting.FileSystemObject")

If FSO.FolderExists(ipath) = True Then

FSO.GetFolder(ipath).Delete

Else

MkDir ipath

End If

Arr = Range("A1").CurrentRegion.Value

lc = UBound(Arr, 2)

Set Rng = Rows(1)

Set Dic = CreateObject("Scripting.Dictionary")

For i = 2 To UBound(Arr)

Str = Arr(i, 1)

' Str = Left(Arr(i, 1), Len(Arr(i, 1)) - 2) '截取某列的关键字,不截取则用,arr(i,1)

If Not Dic.Exists(Str) Then

Set Dic(Str) = Cells(i, 1).Resize(, lc)

Else

Set Dic(Str) = Union(Dic(Str), Cells(i, 1).Resize(, lc))

End If

Next

k = Dic.Keys

t = Dic.Items

On Error Resume Next

With Sheets

For i = 0 To Dic.Count - 1

Set Sht = .Item(k(i))

If Sht Is Nothing Then

.Add(after:=.Item(.Count)).Name = k(i)

Set Sht = ActiveSheet

Else

Sht.Cells.Clear '

End If

Rng.Copy Sht.Range("A1")

t(i).Copy Sht.Range("A2")

Sht.Cells.EntireColumn.AutoFit

Set Sht = Nothing

Next

End With

Sheets(1).Activate

For Each Sht In ThisWorkbook.Sheets

Set sht2 = Workbooks.Add

Sht.Copy sht2.Sheets(1)

sht2.Sheets(1).Name = "表格名称" '每张表的表格名称,自行修改,去掉这句则以关键字为sheet表格名称

For i = sht2.Sheets.Count To 2 Step -1

Application.DisplayAlerts = False

sht2.Sheets(i).Delete

Next

sht2.SaveAs ipath & "\" & Sht.Name & ".xlsx"

sht2.Close

Next

Dim c&

For c = Sheets.Count To 2 Step -1

Sheets(c).Delete

Next

MsgBox "数据处理完成" & Chr(10) & "数据保存在电脑桌面!!" & Chr(10) & "文件路径:" & ipath

Application.Calculation = xlCalculationAutomatic

Application.ScreenUpdating = True

End Sub




以下为只把总表拆分成单独的sheet表格,不导出文件!!

Sub 总表拆分成多个sheet表格()

Dim Arr, Rng As Range, Sht As Worksheet, Dic As Object

Dim k, t, Str As String, i As Long, lc As Long

Application.ScreenUpdating = False

Application.Calculation = xlCalculationManual

Arr = Range("A1").CurrentRegion.Value

lc = UBound(Arr, 2)

Set Rng = Rows(1)

Set Dic = CreateObject("Scripting.Dictionary")

For i = 2 To UBound(Arr)

Str = Arr(i, 1)

' Str = Left(Arr(i, 1), Len(Arr(i, 1)) - 2) '截取关键字,不截取则用,arr(i,1)

If Not Dic.Exists(Str) Then

Set Dic(Str) = Cells(i, 1).Resize(, lc)

Else

Set Dic(Str) = Union(Dic(Str), Cells(i, 1).Resize(, lc))

End If

Next

k = Dic.Keys

t = Dic.Items

On Error Resume Next

With Sheets

For i = 0 To Dic.Count - 1

Set Sht = .Item(k(i))

If Sht Is Nothing Then

.Add(after:=.Item(.Count)).Name = k(i)

Set Sht = ActiveSheet

Else

Sht.Cells.Clear '

End If

Rng.Copy Sht.Range("A1")

t(i).Copy Sht.Range("A2")

Sht.Cells.EntireColumn.AutoFit

Set Sht = Nothing

Next

End With

Sheets(1).Activate

MsgBox "数据处理完成"

Application.Calculation = xlCalculationAutomatic

Application.ScreenUpdating = True

End Sub



本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 办公魔盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档