使用VBA过滤后,在表中选择前n行

时间:2013-09-09 21:57:10

标签: excel excel-vba vba

似乎将过滤器应用于表已经破坏了我对如何处理它的理解。

我有一个包含多列的表格。我要过滤其中一个列并对另一个列进行排序。之后,我想选择/复制过滤到另一个表中的前10行特定列。

我可以在过滤之前轻松完成此操作。我需要在应用滤镜后的前10行。我没有看到如何在过滤器后选择第10行。

有人能指出我的VBA参考资料,解释如何执行此操作吗?我需要使用SQL来执行此操作吗?我是不是在考虑这个并且太复杂了?

2 个答案:

答案 0 :(得分:2)

以下用于在应用过滤后选择F列的前10个可见单元格。如果要排除标题单元格,则需要从F2开始。

Sub TenVisible()
    Dim rng As Range
    Dim rngF As Range
    Dim rng10 As Range

    Set rngF = Range("F:F").SpecialCells(xlCellTypeVisible)

    For Each rng In Range("F:F")
        If Not Intersect(rng, rngF) Is Nothing Then
            If rng10 Is Nothing Then
                Set rng10 = rng
            Else
                Set rng10 = Union(rng10, rng)
            End If
            If rng10.Cells.Count = 10 Then Exit For
        End If
    Next rng
    Debug.Print rng10.Address
    '.. $F$1:$F$2,$F$4:$F$5,$F$9:$F$10,$F$12,$F$20:$F$21,$F$23
    rng10.Select
End Sub

以下是从F2向下选择的多种方法之一(假设UsedRange从第1行开始):

Set rngF = Range("F2", Cells(ActiveSheet.UsedRange.Rows.Count, _
    Range("F2").Column)).SpecialCells(xlCellTypeVisible)

答案 1 :(得分:0)

对于它的价值,看到这是这类问题的第一个搜索结果之一 -
在命名列上过滤表后,如下所示:

Worksheets("YourDataSheet").ListObjects("Table_Name").Range.AutoFilter _
  field:=Worksheets("YourDataSheet").ListObjects("Table_Name").ListColumns("ColumnName").Index, _
  Criteria1:="FilterFor..."

...然后我可以使用以下方法将生成的单个可见行复制到另一个工作表:

Worksheets("YourDataSheet").Range("Table_Name").SpecialCells(xlCellTypeVisible).Range("A1").EntireRow.Copy _
  Destination:=Range("AnotherSheet!$A$2").EntireRow

这是过滤后引用可见行的一种方法。 HTH。