AhmedL
2021-01-26T02:26:18+00:00
小弟最近需要对一个EXCEL进行拆分。把表头和每行的数据以新的EXCEL文件保存,找度娘询问些信息后,最后通过网友分享的VB代码完成了需求。
效果见下面三张图:
[img]https://img.nga.178.com/attachments/mon_202102/01/-7Qbip3-i0daK1gT3cSpo-am.jpg.thumb.jpg[/img]
[img]https://img.nga.178.com/attachments/mon_202102/01/-7Qbip3-5hqlK16T1kS9i-yg.jpg.thumb.jpg[/img]
[img]https://img.nga.178.com/attachments/mon_202102/01/-7Qbip3-4u8zK1sT3cSsg-gw.jpg.thumb.jpg[/img]
但是现在遇到了一个新的问题,见下图
[img]https://img.nga.178.com/attachments/mon_202102/01/-7Q5t6o-j84fK1qT3cSo2-bq.jpg.thumb.jpg[/img]
里面的学校C实际包含了两行数据,之前用的VB代码完成不了这个操作。因为不会写代码,也看不懂代码,只能来娘家求助了,谢谢大家!
附上原来用的代码:
Sub SplitExl()
Application.DisplayAlerts = False '新建的文档存在时,不发送警示,覆盖式保存
Dim lngRs&, lngCs&, cx&, strEndCl$
Dim topR(), EveryR(), oExl As Object, oWk As Workbook
Dim strPath$
strPath = ThisWorkbook.Path & "\"
With ActiveSheet.UsedRange
lngRs = .Rows.Count
lngCs = .Columns.Count
End With
strEndCl = Replace(Replace(Cells(1, lngCs).Address, "$", ""), "1", "")
topR = Range("A1:" & strEndCl & "1") '数据标题行
For cx = 2 To lngRs
EveryR = Range("A" & Format(cx) & ":" & strEndCl & Format(cx)) '把每行记录放入数组
Set oWk = Application.Workbooks.Add
With oWk
'.Parent.Visible = True
With .Sheets(1)
.Range("A1:" & strEndCl & "1") = topR '把标题行放入另建的工作薄
.Range("A2:" & strEndCl & "2") = EveryR '把单个记录放入同一另建的工作薄
End With
.SaveAs Filename:=strPath & EveryR(1, 1) & ".xls" '以每行A列记录为工作薄名称
.Close
End With
Next
Set oWk = Nothing
Set oExl = Nothing
Erase topR: Erase EveryR
Application.DisplayAlerts = True
End Sub
效果见下面三张图:
[img]https://img.nga.178.com/attachments/mon_202102/01/-7Qbip3-i0daK1gT3cSpo-am.jpg.thumb.jpg[/img]
[img]https://img.nga.178.com/attachments/mon_202102/01/-7Qbip3-5hqlK16T1kS9i-yg.jpg.thumb.jpg[/img]
[img]https://img.nga.178.com/attachments/mon_202102/01/-7Qbip3-4u8zK1sT3cSsg-gw.jpg.thumb.jpg[/img]
但是现在遇到了一个新的问题,见下图
[img]https://img.nga.178.com/attachments/mon_202102/01/-7Q5t6o-j84fK1qT3cSo2-bq.jpg.thumb.jpg[/img]
里面的学校C实际包含了两行数据,之前用的VB代码完成不了这个操作。因为不会写代码,也看不懂代码,只能来娘家求助了,谢谢大家!
附上原来用的代码:
Sub SplitExl()
Application.DisplayAlerts = False '新建的文档存在时,不发送警示,覆盖式保存
Dim lngRs&, lngCs&, cx&, strEndCl$
Dim topR(), EveryR(), oExl As Object, oWk As Workbook
Dim strPath$
strPath = ThisWorkbook.Path & "\"
With ActiveSheet.UsedRange
lngRs = .Rows.Count
lngCs = .Columns.Count
End With
strEndCl = Replace(Replace(Cells(1, lngCs).Address, "$", ""), "1", "")
topR = Range("A1:" & strEndCl & "1") '数据标题行
For cx = 2 To lngRs
EveryR = Range("A" & Format(cx) & ":" & strEndCl & Format(cx)) '把每行记录放入数组
Set oWk = Application.Workbooks.Add
With oWk
'.Parent.Visible = True
With .Sheets(1)
.Range("A1:" & strEndCl & "1") = topR '把标题行放入另建的工作薄
.Range("A2:" & strEndCl & "2") = EveryR '把单个记录放入同一另建的工作薄
End With
.SaveAs Filename:=strPath & EveryR(1, 1) & ".xls" '以每行A列记录为工作薄名称
.Close
End With
Next
Set oWk = Nothing
Set oExl = Nothing
Erase topR: Erase EveryR
Application.DisplayAlerts = True
End Sub