我有一个名为Color的列,它已被过滤,因此我可以选择\取消选择所需的颜色。
我录制了一个宏来了解如何过滤除蓝色,绿色和橙色以外的所有颜色的列。
剩下的唯一颜色是红色。
创建的宏如下:
ActiveSheet.Range("$A$1:$B$5").AutoFilter Field:=1, Criteria1:="Red"
此代码的问题在于它不适用于通用案例,因为它包括" Red"并排除其他所有内容,而我需要的是排除蓝色,绿色和橙色,并包含其他所有内容。
我需要不同代码的原因是我的颜色选择可能会根据我从数据库中获得的内容而改变。
例如,如果我自动提取数据并创建过滤器,我的列表中可能会显示粉红色,我的代码会被破坏,因为粉红色不会被选中,只会选择红色。
有关解决此问题的任何提示? 一种想法是选择未选中的所有内容,并取消选择所有选定的内容(如果有任何vba代码可以执行此操作)。有了这个策略,我会选择蓝色,绿色和橙色,然后我会运行交换代码。
答案 0 :(得分:0)
像这样,你可以传递一组值作为过滤条件。如果要添加更多颜色,可以扩展阵列。这是一种选择,而不是取消选择,就好像您想要排除某些颜色,只是不要将它们添加到列表中。这确实依赖于你拥有所有可能的颜色。过滤掉只会延伸到我认为的两个值。
Option Explicit
Public Sub test()
Dim arr()
arr = Array("Red", "Pink")
ActiveSheet.Range("$A$1:$B$5").AutoFilter
ActiveSheet.Range("$A$1:$B$5").AutoFilter Field:=1, Criteria1:=arr, _
Operator:=xlFilterValues
End Sub
答案 1 :(得分:0)
您的颜色数据是 A2 到 A5 的4个单元格。我们构造一个包含这些值的数组,但省略 Blue , Green , Orange 。
然后我们将数组应用为过滤条件:
Sub Framm()
Dim c As Collection, i As Long, v As String, arr
Set c = New Collection
For i = 2 To 5
v = Cells(i, 1)
If v <> "Green" And v <> "Blue" And v <> "Orange" Then
On Error Resume Next
c.Add v, CStr(v)
On Error GoTo 0
End If
Next i
ReDim arr(1 To c.Count)
For i = 1 To c.Count
arr(i) = c.Item(i)
Next i
ActiveSheet.Range("$A$1:$B$5").AutoFilter Field:=1, Criteria1:=(arr), Operator:=xlFilterValues
End Sub
在:
之后: