似乎将过滤器应用于表格破坏了我对如何处理此问题的理解。
我有一个包含多列的表。我将过滤其中一列并在另一列上排序。之后,我想选择/复制过滤到另一个表中的特定列的前 10 行。
我可以在过滤器之前轻松做到这一点。应用过滤器后,我需要前 10 行。我没有看到如何在过滤器之后选择第 10 行。
谁能指出我解释如何做到这一点的 VBA 参考?我需要使用 SQL 来执行此操作吗?我是不是想得太多了,太复杂了?
在应用过滤后,以下工作将选择 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)
对于它的价值,看到这是此类问题的第一个搜索结果之一 -
在过滤命名列上的表之后,如下所示:
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。