任何建议如何解决以下问题?我有一个〜15个不同项目的列表,在任何特定时刻,表中都只有其中一些(Excel 2016)。
我想使用VBA来遍历现有表格范围并根据每个不同的项目对其进行过滤。找到后,我要启动其他代码。
我没有问题,只需一个简单的代码即可查找并过滤出一个硬编码的项目,如果找到,则运行另一个代码片段,如果没有,则退出。但是我觉得必须有一个更好的选择,因为安排15个不同的脚本运行效率很低,我还需要一个一个地启动它们。
关于使用1个代码而不是运行15个不同代码的任何建议?
虚拟表可能是更好的解释-在总共15个不同的项目中,它目前有4个不同的项目。我想遍历表并分别过滤出每个项目,然后对每个项目运行代码。
这是我想出的,但只有在使用不同的硬编码过滤条件复制并启动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
答案 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