VBA自动过滤器子集在顶部包含额外的行

时间:2019-02-06 21:44:12

标签: autofilter

该宏尝试一次为一个条件(PE,AR,DC,FI)过滤工作表“ Temp”,然后将包含非重复数据的列5复制到另一工作表“ Detail”中。请帮助我理解两个问题。 (1)宏会为4个条件中的每一个进行正确的过滤。但是,每个标准的过滤列表始终包含第一个标准“ PE”的过滤列表中的第一项。即条件2“ AR”的过滤列表包含AR中的所有项目,但以“ PE”中的第一项开始。有一个标题行,但似乎没有什么不同。在过滤“ PE”(属于它)时,如何在所有情况下都摆脱掉第一项? (2)我希望能够计算和存储每个过滤列表的可见行数。我希望能够从单元格A4开始将每个过滤的列表粘贴到另一个电子表格(“详细信息”)中。每个连续的列表应从刚粘贴的列表下方开始两行。例如,如果第一个列表包含16个项目,则下一个列表应在单元格A22(A4 + 16 + 2)中开始。由于某种原因,复制行(用于记住已过滤列表中的行数)在第一次(= 16)左右是正确的,但是在第二次(= 1?)时是正确的。看来q的1和2是相关的。也许,如果我找出了#1,就可以对#2有所作为。我查看了有关自动过滤的现有帖子,但在这里仍然感到有些困惑。非常感谢您的帮助!

Sub FilterCategories()

Dim LastRow As Long
Dim startpos As Integer
Dim k As Integer
Dim copiedrows(1 To 4) As Long
Dim AG(1 To 4) As String
Dim rng As Range


AG(1) = "PE"
AG(2) = "AR"
AG(3) = "DC" 
AG(4) = "FI"

'Autofilter based on each AG and copy over to 'Detail'. Create temporary 
 sheet for filtering.


 startpos = 4

        For k = LBound(AG) To UBound(AG)

        Application.DisplayAlerts = False
        On Error Resume Next
        Sheets("Temp").Delete
        Sheets("Lookup").AutoFilterMode = False
        Sheets("Lookup").Copy After:=Sheets("Lookup")
        ActiveSheet.Name = "Temp"

        With Sheets("Temp")
        AutoFilterMode = False

        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row  


                With .Range("A2:E" & LastRow)

                    .AutoFilter Field:=4, Criteria1:=AG(k)

                    .RemoveDuplicates Columns:=5

                    .Columns(5).SpecialCells(xlCellTypeVisible).Copy 
Destination:=Sheets("Detail").Range("A" & startpos)

                    copiedrows(k) = .SpecialCells(xlCellTypeVisible).Rows.Count

                    Debug.Print copiedrows(k)

                    startpos = copiedrows(k) + 6

                    Debug.Print startpos


                End With


          End With

          Next


End Sub

0 个答案:

没有答案