标签:VBA
如下图1所示,列B中有一系列重复数据,想要将每个重复的数据所在的行放到一个新工作簿并以该数据作为工作簿名。例如,列B中为7890的所有行复制到一个新工作簿并命名为7890.xlsx。
图1
这里借用在vbaexpress.com中找到的一段程序来实现。
代码如下:
Sub test()
Dim rng As Range, wbDest As Workbook, wsDest As Worksheet, wsCbasis As Worksheet
Dim DTCCstr As Variant, var As Variant, DTCCcol As New Collection, x As Long
With Application
.EnableAnimations = False
.Calculation = xlCalculationManual
.ScreenUpdating = False
End With
Set wsCbasis = Sheets("源数据")
With wsCbasis
var = .Range("B2:B" & .Range("B" & Rows.Count).End(xlUp).Row)
For x = 0 To UBound(var)
On Error Resume Next
DTCCcol.Add var(x, 1), CStr(var(x, 1))
On Error GoTo 0
Next x
If Not .AutoFilterMode Then .Range("A1").AutoFilter
Set rng = .UsedRange
For Each DTCCstr In DTCCcol
rng.AutoFilter 2, DTCCstr
rng.SpecialCells(12).Copy
Set wbDest = Workbooks.Add
Set wsDest = wbDest.Sheets(1)
With wsDest.Range("A1")
.PasteSpecial 8
.PasteSpecial 12
.PasteSpecial -4122
End With
Application.CutCopyMode = False
wbDest.SaveAs ThisWorkbook.Path & "/" & DTCCstr & ".xlsx"
wbDest.Close
Next DTCCstr
rng.AutoFilter
End With
With Application
.EnableAnimations = True
.Calculation = xlCalculationAutomatic
.ScreenUpdating = True
End With
End Sub
如果你有类似的需求,只需根据实际情况修改代码中工作表的名称,或者数据所有的列。
这也是一个很好的初学者示例,有兴趣的朋友可以边学习边研究其实现过程。