猿问

用VBA循环遍历过滤列表的最简单方法?

如果我在Excel中设置了自动过滤器,并且想用VBA代码遍历一列中的所有可见数据,那么最简单的方法是什么?


不应包括所有已过滤掉的隐藏行,因此从上到下的简单范围无济于事。


有什么好主意吗?谢谢。


九州编程
浏览 1095回答 3
3回答

慕尼黑8549860

假设A2:A11我的自动过滤器位于,则单元格中的数字为1到10 A1。我现在过滤以仅显示大于5的数字(即6、7、8、9、10)。此代码将只显示可见的单元格:Sub SpecialLoop()    Dim cl As Range, rng As Range    Set rng = Range("A2:A11")    For Each cl In rng        If cl.EntireRow.Hidden = False Then //Use Hidden property to check if filtered or not            Debug.Print cl        End If    NextEnd Sub也许有更好的方法,SpecialCells但是以上方法在Excel 2003中对我有用。编辑刚刚找到了更好的方法SpecialCells:Sub SpecialLoop()    Dim cl As Range, rng As Range    Set rng = Range("A2:A11")    For Each cl In rng.SpecialCells(xlCellTypeVisible)        Debug.Print cl    Next clEnd Sub

慕姐4208626

我建议使用OffsetHeaders位于第1行。请参见此示例Option ExplicitSub Sample()    Dim rRange As Range, filRange As Range, Rng as Range    'Remove any filters    ActiveSheet.AutoFilterMode = False    '~~> Set your range    Set rRange = Sheets("Sheet1").Range("A1:E10")    With rRange        '~~> Set your criteria and filter        .AutoFilter Field:=1, Criteria1:="=1"        '~~> Filter, offset(to exclude headers)        Set filRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow        Debug.Print filRange.Address        For Each Rng In filRange            '~~> Your Code        Next    End With    'Remove any filters    ActiveSheet.AutoFilterMode = FalseEnd Sub

杨魅力

一种方法是向下过滤A1中的数据;dim Rng as Rangeset Rng = Range("A2", Range("A2").End(xlDown)).Cells.SpecialCells(xlCellTypeVisible)...for each cell in Rng    ...     
随时随地看视频慕课网APP
我要回答