我运行每周销售报告并根据销售人员名称移动部分信息,以便我可以生成多个报告。
我有代码对“L”列中的销售人员名称进行排序,删除重复的名称并生成一个新列“P”。然后它创建新工作表并在“P”中的名称后面命名。这样,如果我有销售人员来去,我不必手动修改任何东西。
我目前正在过滤名称并手动将行数据移动到各自的表格中。我需要的是:
1-找到列L中与“主名称列”单元格P2或P3或P4等匹配的所有名称。
2-将列L中具有名称的所有行复制到同名的工作表中。工作表名称与P列中的名称相同。
3-移动P列中的下一个名称,单元格P3,然后再次开始匹配过程。 。 .`
我附上了我用来从P列中的名字创建工作表的代码。
Dim newSheet As Worksheet, regionSheet As Worksheet
Dim cell As Object
Dim regionRange As String
Set regionSheet = Sheets("EXPORT_QUERY")
Application.ScreenUpdating = False
regionRange = "P2:" & regionSheet.Range("P2").End(xlDown).Address
For Each cell In regionSheet.Range(regionRange)
If SheetExists(cell.Value) = False Then
Sheets.Add After:=Sheets(Sheets.Count)
Set newSheet = ActiveSheet
newSheet.Name = cell.Value
Application.DisplayAlerts = False
Application.DisplayAlerts = True
End If
Next cell
MsgBox "All worksheets have been created successfully"
Application.ScreenUpdating = True
End Sub
答案 0 :(得分:0)
我在大纲形式中所做的就是你所拥有的,然后在你创建了这张表&在向下移动到下一个P2,P3等单元格之前,创建一个从上到下沿着列L向下移动的循环,如果L中的名称与Cell中的名称匹配,则取出该行并将其复制到新的创建工作表。
要做到这一点,您需要有一个RowCounter变量,该变量从您要填充新工作表的第一行开始,并且每次从&#34复制行时都会递增。 ;主"工作表到新创建的工作表。这是你的目的地"占位符。它与L列下的循环不同,因为它们计算不同的东西。
看起来你在这里有一个好的开始;将新代码放在两个Application.DisplayAlerts语句之间应该有效。
希望有所帮助;它应该至少让你朝着正确的方向前进。
答案 1 :(得分:0)
希望下面的代码应该运行得很好,如果没有,可能会有一些需要编辑的变量。如果它在某处出错,请告诉我,我可以帮助你。这里假设列P仅包含唯一名称。
Set regionSheet = Sheets("EXPORT_QUERY")
regionRange = "P2:" & regionSheet.Range("P2").End(xlDown).Address
For Each cell In regionSheet.Range(regionRange)
Range("A1:L" & Range("A" & rows.count).end(xlup).row).select
Selection.AutoFilter
ActiveSheet.Range("$A$2:$L$" & Range("A" & Rows.Count).End(xlUp).Row).AutoFilter Field:=12, Criteria1:=cell.Value
ActiveSheet.Range("$A$2:$L$" & Range("A" & Rows.Count).End(xlUp).Row).Copy
Sheets(cell.Value).Select
Range("A" & Range("A" & Rows.Count).End(xlUp).Row).Select
ActiveSheet.Paste
Sheets("EXPORT_QUERY").select
Selection.AutoFilter
Next cell
MsgBox DONE"