首页 > 解决方案 > 在两列之间使用“或”条件进行自动过滤

问题描述

我很确定我能做到这一点的唯一方法是使用帮助栏,但在我认输之前想问问专家。

我有 2 列我想过滤,但需要显示两个标准的结果。因此,如果“S”列(字段#19)或“CK”列(字段#89)等于“红色”,我想看到它们。

有谁知道怎么解决?

Sub Filter_by_Red_CD_LE()
ActiveSheet.Unprotect
Dim ddate As String
ddate = Month(Date)
Dim r As Range

Set r = ActiveSheet.Range("$a$10:$cp$500")
If (ActiveSheet.AutoFilterMode And ActiveSheet.FilterMode) Or ActiveSheet.FilterMode Then
ActiveSheet.ShowAllData
End If
Selection.AutoFilter
ActiveSheet.Range("$a$10:$cp$500").AutoFilter Field:=19, Criteria1:="Red"
ActiveSheet.Range("$a$10:$cp$500").AutoFilter Field:=89, Criteria1:="Red"
Range(Cells(r.Rows.Count + 1, 1), Cells(Rows.Count, Columns.Count)).EntireRow.Hidden = True
Range("$a$10:$cp$500").Sort Key1:=Range("B10"), Order1:=xlAscending, Header:= _
    xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
ActiveWindow.ScrollColumn = 47
ActiveWindow.ScrollRow = 11
Range("A8").Value = "Current Filter = REd LE/CD"
Worksheets("Pipeline").Shapes("Drop Down 11").ControlFormat.Value = 0

End Sub

标签: excelvba

解决方案


此代码假定数据区域的第一行包含列标题。

首先,您需要定义数据范围和条件范围。

然后使用 (1) 要将选择条件应用到的列的列标题和 (2) 选择值来设置条件范围。

S='Red' OR CK='Red' 看起来像这样。

重庆
Col S 标头 Col CK 标头
红色的
红色的

S='Red' AND CK='Red' 看起来像这样。

重庆
Col S 标头 Col CK 标头
红色的 红色的

VBA 代码如下所示。

Dim dataRange As Range
Dim criteriaRange As Range

' Replace worksheet name as required
With Worksheets("Sheet1")
    
    ' Define the data range.
    Set dataRange = .Range("A10:CP500")
    
    'Define criteria range
    Set criteriaRange = .Range("CQ10:CR12")
    
    ' Copy column headers
    .Cells(10, "CQ").Value = .Cells(10, "S").Value
    .Cells(10, "CR").Value = .Cells(10, "CK").Value
    
    ' Criteria values
    .Cells(11, "CQ").Value = "Red"
    .Cells(12, "CR").Value = "Red"

End With

' Apply the filter.
dataRange.AdvancedFilter xlFilterInPlace, criteriaRange

完成后,您可以像这样轻松清除条件范围。

criteriaRange.Clear

高级过滤器文档在这里Range.AdvancedFilter 方法,但它不是很有帮助。如果你用谷歌搜索 Excel VBA Range.AdvancedFilter,还有很多其他的例子。


推荐阅读