当列L值与列P匹配时,VBA将行复制到新电子表格

时间:2015-03-06 07:30:20

标签: excel vba excel-vba

我运行每周销售报告并根据销售人员名称移动部分信息,以便我可以生成多个报告。

我有代码对“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

2 个答案:

答案 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"