过滤2个不相等的通配符。可能?

时间:2015-11-06 23:43:55

标签: vba excel-vba excel

是否可以在两个通配符标准上过滤工作表。 我想从我的日期删除所有在C列中具有标识号而不是从1或4开始的行。过滤和删除后我想再次显示所有数据并且之间没有空白行

这甚至可能吗?我在尝试很多东西。我发布了两个我认为最有可能工作的选项 - 但没有。任何信息都非常感谢。

With ActiveSheet
'FIRST TRY
.AutoFilter Field:=3, Criteria1:="<>1*", Operator:=xlOr, Criteria2:="<>4*"

'SECOND TRY
.AutoFilter Field:=3, Criteria1:=Array( _
    "<>1*", "<>4*"), Operator:=xlFilterValues

'THEN I WANT ALL ROWS THAT DONT START WITH 1 OR 6 DELETED
.Offset(1).SpecialCells(xlVisible).EntireRow.Delete
End With

3 个答案:

答案 0 :(得分:2)

正如Tim Williams在评论中所提到的,您无法将文本过滤器应用于数字列。在任何一种情况下,我个人都不会使用过滤器,因为只有简单的VBA方法:

Dim current As Long
Dim sheet As Worksheet
Dim start As String

Set sheet = ActiveSheet
With sheet
    For current = .UsedRange.Rows.Count To 2 Step -1
        start = Left$(.Cells(current, 3), 1)
        If start <> "1" And start <> "4" Then
            .Rows(current).Delete
        End If
    Next
End With

编辑:如果工作表已排序,则行删除速度更快批次,因为您可以跟踪需要删除的范围的开始和结束,而不是删除可能有数千个单独的行:

Dim current As Long
Dim sheet As Worksheet
Dim start As String
Dim bottom As Long

With sheet
    For current = .UsedRange.Rows.Count To 2 Step -1
        start = Left$(.Cells(current, 3), 1)
        If start <> "1" And start <> "4" And bottom = 0 Then
            bottom = current
        ElseIf (start = "1" Or start = "4") And bottom <> 0 Then
            .Range((current + 1) & ":" & bottom).Delete
            bottom = 0
        End If
    Next
End With

答案 1 :(得分:1)

尝试将其作为两个单独的过滤器。我没有测试这段代码,但我想知道它是否会维护第一个过滤器并添加第二个过滤器。

'Filter 1
    .AutoFilter Field:=3, Criteria1:="<>1*", Operator:=xlFilterValues
'Filter 2
    .AutoFilter Field:=3, Criteria2:="<>4*",  Operator:=xlFilterValues

答案 2 :(得分:0)

这对我有用:

ActiveSheet.Range("$A$1").CurrentRegion.AutoFilter Field:=3, _
            Criteria1:="<>1*", Operator:=xlAnd, Criteria2:="<>4*"

Col C必须格式化为&#34; Text&#34; - 您可能需要重新输入信息才能确定(您应该看到grren&#34;数字存储为文本&#34;这些单元格上的指示符)