在VBA中选择动态,过滤范围

时间:2017-06-12 17:42:06

标签: excel excel-vba vba

我正在尝试选择跨越col的动态范围的过滤数据。 A:col。 J没有选择标题(在第1行)。从那里我需要将它复制并粘贴到一个新的工作表中,我将进一步操作它,但我无法想出一个有效或功能的方法来做到这一点。基于我在另一个论坛上找到的一些代码,我能够选择所有可见的单元格"在一个列中,但我遇到了试图选择整个范围的问题。我仍然是vba的新手,所以请原谅我的语法,但我在下面发布的代码试图通过Rows.Count和i进行迭代,这是一个整数1-10。如果您对如何更好,更有效地做到这一点有任何建议,我将非常感激。

Sub SelectVisibleInColD()
    Dim lRow As Long, i As Integer
    Set i = 1
Do While i <= 10

    With ActiveSheet
        lRow = .Cells(.Rows.Count, i).End(xlUp).Row
        If lRow < 3 Then Exit Sub
        .Cells(1, 1).Offset(1, 0).Resize(lRow - 1).SpecialCells(xlCellTypeVisible).Select
    End With

 i = i + 1
 Loop
End Sub

2 个答案:

答案 0 :(得分:2)

您可以使用Range ActiveSheet属性选择范围。您已经有了最后一行,并且您知道标题位于第一行,因此您的范围从位置A2开始,然后转到列J的最后一行

ActiveSheet.Range("A2:J"&lRow).SpecialCells(xlCellTypeVisible)

如果要复制此范围,请使用{/ 1}}功能,如

Copy

此功能仅将选择移动到内存,粘贴它,构建目标范围并调用yourRangeAsAbove.Copy 功能。

答案 1 :(得分:0)

我遇到了以下答案,搜索了我的问题:在vba中删除过滤的选择。 但是,尝试回答&lRow 会给我一个运行时错误1004,应用程序定义的错误或对象定义的错误

我绕过这个 ActiveSheet.Range(“ A2:G”& Range(“ A”&Rows.Count).End(xlUp).Row) .SpecialCells(xlCellTypeVisible).Delete

对于那些可能也会遇到相同问题的人。