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

VBA在列L值与列P匹配时将行复制到新电子表格,vba,excel,Vba,Excel,我运行每周销售报告,并根据销售人员姓名移动一些信息,以便生成多个报告 我有代码对“L”列中的销售人员姓名进行排序,删除重复的姓名并生成一个新的列“p”。然后创建新的图纸,并在“P”中的名称后命名。这样,如果我让销售人员来来去去,我就不必手动修改任何内容 我目前过滤名称并手动将行数据移动到各自的工作表中。我需要的是: 1-查找L列中与“主名称列”单元格P2或P3或P4等匹配的所有名称 2-将L列中具有名称的所有行复制到同名工作表中。工作表名称与第P列中的名称相同 3-在第p列单元格P3中移动下一个

我运行每周销售报告,并根据销售人员姓名移动一些信息,以便生成多个报告

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

以大纲的形式,我要做的是,在创建工作表之后&在向下移动到下一个P2、P3等单元格之前,创建一个从上到下沿列L向下的循环,如果L中的名称与单元格中的名称匹配,则将该行复制到新创建的工作表中

要做到这一点,您需要有一个RowCounter变量,该变量从要在新工作表中填充的第一行开始,并在每次将行从“主”工作表复制到新创建的工作表时递增。这是您的“目的地”占位符。这和L列的循环不一样,因为它们计算的是不同的东西

看起来你在这里的一切是一个好的开始;将新代码放在两个Application.DisplayAlerts语句之间应该可以工作


希望有帮助;这至少会让您朝着正确的方向前进。

希望下面的代码能够很好地工作,如果没有,可能会有一些变量需要编辑。如果有什么地方出错,一定要告诉我,我可以帮你。这里的假设是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"

我必须将范围(“A”&Range(“A”&Rows.Count line”)更改为ActiveSheet.Range,否则它会试图从empy工作表中提取数据。但这正是我想要的。现在将两个代码合并到一个控制按钮中,这一步就完成了。再次干杯。我该回家喝杯啤酒了