Excel VBA筛选器循环

时间:2019-02-28 18:25:14

标签: excel vba

任何建议如何解决以下问题?我有一个〜15个不同项目的列表,在任何特定时刻,表中都只有其中一些(Excel 2016)。

我想使用VBA来遍历现有表格范围并根据每个不同的项目对其进行过滤。找到后,我要启动其他代码。

我没有问题,只需一个简单的代码即可查找并过滤出一个硬编码的项目,如果找到,则运行另一个代码片段,如果没有,则退出。但是我觉得必须有一个更好的选择,因为安排15个不同的脚本运行效率很低,我还需要一个一个地启动它们。

关于使用1个代码而不是运行15个不同代码的任何建议?

虚拟表可能是更好的解释-在总共15个不同的项目中,它目前有4个不同的项目。我想遍历表并分别过滤出每个项目,然后对每个项目运行代码。

enter image description here

这是我想出的,但只有在使用不同的硬编码过滤条件复制并启动15次后,此方法才能工作:

Sub Filter_single ()

Dim Filtered as Range  
Set Filtered = Sheets("Sheet1").Range("Table1").SpecialCells(xlCellTypeVisible)

    With ActiveSheet.ListObjects("Table1").Range
        .AutoFilter Field:=1, Criteria1:="Apple"

    End With

If Filtered is Nothing Then
End If

... if range "Filtered" is not Nothing, run another code here...

End Sub

1 个答案:

答案 0 :(得分:1)

将代码嵌套在唯一的值循环中。我只是在这里对Arr的值进行了硬编码,但是您可以通过多种方式加载此值(所有方法在本网站上都有详细记录)


Sub Filter_single()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim Filtered As Range, i As Long, Arr

Arr = Array("Apple", "Orange", "Grape")

For i = LBound(Arr) To UBound(Arr)
    With ws.ListObjects("Table1").Range
        .AutoFilter Field:=1, Criteria1:="Apple"
        Set Filtered = .SpecialCells(xlCellTypeVisible)
    End With

    If Filtered.Rows.Count > 1 And Not Filtered Is Nothing Then
        'Run Macro Here
    End If

    Set Filtered = Nothing
Next i

End Sub