1

似乎将过滤器应用于表格破坏了我对如何处理此问题的理解。

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

我可以在过滤器之前轻松做到这一点。应用过滤器后,我需要前 10 行。我没有看到如何在过滤器之后选择第 10 行。

谁能指出我解释如何做到这一点的 VBA 参考?我需要使用 SQL 来执行此操作吗?我是不是想得太多了,太复杂了?

4

2 回答 2

4

在应用过滤后,以下工作将选择 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)
于 2013-09-09T22:25:02.067 回答
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。

于 2015-01-16T15:30:45.150 回答