我想根据一些条件使用VBA宏将数据拆分为多个文件,然后在新创建的文件中,根据另一个列过滤器(条件)再次拆分。
基本上,有两个YouTube教程单独解释了每个步骤,但是我并没有将它们混在一起。
第一个将主电子表格拆分为文件的文件,对我有用:https://www.youtube.com/watch?v=sCjqBlOk6f8
第二个将电子表格拆分为多个工作表:https://www.youtube.com/watch?v=5bOFNsdHiPk
第二个实际上并不完全符合我的需要,因为您必须执行一些手动步骤,例如选择和命名所需的范围(即“ Master”和“ SplitCode”)。我要拆分的数据和文件太多,所以我想有一个宏来自动拆分它,而无需像第二个教程那样手动进行拆分。但这实际上几乎是我所需要的。
因此,尝试将这两个代码混合使用,这是我尝试过的,但实际上不起作用:
Sub Split()
Dim wswb As String
Dim wssh As String
wswb = ActiveWorkbook.Name
wssh = ActiveSheet.Name
vColumn = InputBox("Please indicate which column you would like to split by", "Column selection")
Columns(vColumn).Copy
Sheets.Add
ActiveSheet.Name = "_Summary"
Range("A1").PasteSpecial
Columns("A").RemoveDuplicates Columns:=1, Header:=xlYes
vCounter = Range("A" & Rows.Count).End(xlUp).Row
For i = 2 To vCounter
vFilter = Sheets("_Summary").Cells(i, 1)
Sheets(wssh).Activate
ActiveSheet.Columns.AutoFilter field:=Columns(vColumn).Column, Criteria1:=vFilter
Cells.Copy
Workbooks.Add
Range("A1").PasteSpecial
ActiveSheet.Name = "Master"
dspColumn = "D"
Columns(dspColumn).Copy
Sheets.Add
ActiveSheet.Name = "dspSummary"
Range("A1").PasteSpecial
Columns("A").RemoveDuplicates Columns:=1, Header:=xlYes
dspCounter = Range("A" & Rows.Count).End(xlUp).Row
For j = 2 To dspCounter
dspFilter = Sheets("dspSummary").Cells(j, 1)
Sheets("Master").Activate
ActiveSheet.Columns.AutoFilter field:=Columns(dspColumn).Column, Criteria1:=dspFilter
Cells.Copy
Sheets.Add
ActiveSheet.Name = dspFilter
Range("A1").PasteSpecial
Next j
If vFilter <> "" Then
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\Split Results\" & vFilter
Else
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\Split Results\_Empty"
End If
ActiveWorkbook.Close
Workbooks(wswb).Activate
Next i
'Sheets("_Summary").Delete
End Sub
欢迎任何帮助!
答案 0 :(得分:0)
好的,我上面发布的代码可以正常工作。唯一的问题是这条线
ActiveSheet.Name = dspFilter
复制的dspFilter(工作表名称)长于允许的31个字符。
因此将该行更改为
ActiveSheet.Name = Left(dspFilter, 30)
解决了问题。
感谢任何发表评论或试图考虑的人。