用VBA循环过滤列表最简单的方法是什么?
如果我在Excel中设置了一个自动filter,并且我想用VBA代码遍历一列中的所有可见数据,那么最简单的方法是什么?
所有已被过滤掉的隐藏行都不应该包含在内,所以从上到下的简单范围不会有帮助。
任何好主意? 谢谢。
假设在单元格A2:A11有数字1到10 A2:A11在A1使用我的自动filter。 我现在过滤只显示数字大于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 Next End Sub
也许有更好的方法与SpecialCells但上述工作在Excel 2003中为我。
编辑
只要find一个更好的方式与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 cl End Sub
我会build议使用Offset假设头在第1行。看到这个例子
Option Explicit Sub 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 = False End Sub
一种方法假设A1中的过滤数据向下;
dim Rng as Range set Rng = Range("A2", Range("A2").End(xlDown)).Cells.SpecialCells(xlCellTypeVisible) ... for each cell in Rng ...
Call MyMacro() ActiveCell.Offset(1, 0).Activate Do Until Selection.EntireRow.Hidden = False If Selection.EntireRow.Hidden = True Then ActiveCell.Offset(1, 0).Activate End If Loop