首页 > 解决方案 > 创建 VBA 循环以查看自动过滤器中的每个条件

问题描述

我首先要说我不知道​​我是否正确地问了这个问题……令人鼓舞,对吧?

我有一个 Excel 电子表格,其中第一行是激活了自动过滤器的列标题。我想要做的是在 VBA 中创建一个循环,其中来自自动过滤字段的第一个单独标准:=2 被“选中”并显示过滤后的数据;然后“未选中”并且未显示;然后过滤器框中的下一个标准是“选中”并显示过滤后的数据;然后“未选中”和未显示,依此类推。

在过滤器框中“选中”条件后显示数据时,我确实有其他意图,但我相信我可以分别找出这些操作的编码。

我正在尝试,或者更确切地说,希望避免的是为一个庞大的数组创建一个单独的逗号分隔值范围,因为 autofilter 字段中有很多标准:= 2,而这些标准在 autofilter 字段中:=2 偶尔会改变。也许这是可能的,也许不是。

非常感谢任何帮助或指导!

更新 - 我认为过滤 B 列中的唯一值然后将这些值粘贴到工作表上一个遥远的位置 S 列中可能更简单。然后我记录了一个基本的过滤器宏并将条件1:=更改为单元格(uic,19),即S列中的值,并创建了一个do while循环来对S列中的条件运行过滤器,在每个循环之前添加+1。

代码如下 -

 Sub filter_example()
 Dim lastrowuic, lastrowarray As Long
 lastrowuic = Cells(Rows.Count, "B").End(xlUp).Row
 lastrowarray = Cells(Rows.Count, "S").End(xlUp).Row
 Dim uniquesArray As Variant
 uniquesArray = Range("B2:B" & lastrowuic)
 Dim uic As Integer
 uic = 2

 With Sheet1
    Sheets("Sheet1").Columns("B:B").AdvancedFilter Action:=xlFilterCopy, _
    CopyToRange:=.Range("S1"), Unique:=True
 End With

 Do While lastrowarray
    ActiveSheet.Range("$A$1:$S$21").AutoFilter=2,Criteria1:=Cells(uic, 19)
 ClearAllFilters = True
 uic = uic + 1
 Loop

 End Sub

可以清理的两个区域是 activesheet.range 和真正的结尾。这个循环确实做我想做的事,但我希望它在到达第一个空白行后退出循环,在最后一行数据之后,在列“S”(又名 19)中,然后清除 autofilter= 中的过滤器2. 就是这样。否则,这就是我想要它做的事情。

任何额外的帮助表示赞赏!

标签: excelvbaloopsautofilter

解决方案


推荐阅读