Vba 筛选2个不相等的通配符。可能的

Vba 筛选2个不相等的通配符。可能的,vba,excel,Vba,Excel,是否可以根据两个通配符筛选工作表。 我想从我的日期中删除列C中标识号不以1或4开头的所有行。过滤和删除后,我希望再次显示所有数据,并且中间没有空行 这可能吗?我试了很多东西。我发布了两个我认为最有可能奏效的选项,但没有。任何信息都非常感谢 With ActiveSheet 'FIRST TRY .AutoFilter Field:=3, Criteria1:="<>1*", Operator:=xlOr, Criteria2:="<>4*" 'SECOND TRY .A

是否可以根据两个通配符筛选工作表。 我想从我的日期中删除列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
使用ActiveSheet的

“第一次尝试
.自动筛选字段:=3,准则1:=“1*”,运算符:=xlOr,准则2:=“4*”
“第二次尝试
.自动筛选字段:=3,标准1:=数组(_
“1*”,“4*”,运算符:=xlFilterValues
'然后我希望删除所有不以1或6开头的行
.Offset(1).特殊单元格(xlVisible).EntireRow.Delete
以

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

'Filter 1
    .AutoFilter Field:=3, Criteria1:="<>1*", Operator:=xlFilterValues
'Filter 2
    .AutoFilter Field:=3, Criteria2:="<>4*",  Operator:=xlFilterValues
”过滤器1
.AutoFilter字段:=3,准则1:=“1*”,运算符:=xlFilterValues
'过滤器2
.AutoFilter字段:=3,准则2:=“4*”,运算符:=xlFilterValues

正如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
将电流调暗为最长
将工作表设置为工作表
以字符串开头
设置工作表=活动工作表
用床单
对于当前=.UsedRange.Rows.Count到2步骤-1
开始=左$(.单元格(当前,3),1)
如果启动“1”和启动“4”,则
.行(当前)。删除
如果结束
下一个
以
编辑:如果对工作表进行排序,则行删除速度会快得多,因为您可以跟踪需要删除的范围的开始和结束,而不是删除数千行:

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
将电流调暗为最长
将工作表设置为工作表
以字符串开头
暗底一样长
用床单
对于当前=.UsedRange.Rows.Count到2步骤-1
开始=左$(.单元格(当前,3),1)
如果从“1”开始,从“4”开始,底部=0,则
底部=电流
ElseIf(start=“1”或start=“4”)和底部0,然后
.范围((当前+1)&):“&底部)。删除
底部=0
如果结束
下一个
以
这对我很有用:

ActiveSheet.Range("$A$1").CurrentRegion.AutoFilter Field:=3, _
            Criteria1:="<>1*", Operator:=xlAnd, Criteria2:="<>4*"
ActiveSheet.Range(“$A$1”)。CurrentRegion.AutoFilter字段:=3_
准则1:=“1*”,运算符:=xlAnd,准则2:=“4*”

列C必须格式化为“文本”-您可能需要重新输入信息以确保(您应该在这些单元格上看到grren“数字存储为文本”指示符)

如果您要筛选的列是数字,则我认为您不能应用类似的通配符条件。你能做的最好的事情可能是添加该列的“文本”版本并对其进行过滤。您的第一个示例是使用xlAnd作为运算符。嗨,Tim,刚刚尝试过。无法使用xlAnd。找不到命名参数是错误。我刚刚检查过,给定的C列被格式化为文本。嗨,共产国际。我喜欢这个解决方案的简单性,但它不起作用。它的第一个问题是,它持续的时间非常长,会使excel崩溃——可能是因为它会在第3列的每个单元格中循环检查满足条件的行——其中有50k行是cca。第二个问题是-它删除了第一行的标题-我不想这样做。@drLecter-标题很简单,将
更改为1
到2
。如果sceen更新关闭,它将在我的机器上用100000行随机数据在合理的时间内完成。您是否在任何单元格中都有公式,或者都是数据?顺便说一句,需要这么长时间的不是标准检查——这不到一秒钟——而是行删除。它能被分类吗?嗨,Comintem-它有公式,但计算是手动设置的,直到我删除所有我想要的东西。你给我的东西完成了任务,如果我们不能进一步改进,我会把它标记为答案。它仍然持续很长时间-需要2-3分钟才能完成删除。我尝试添加这样的排序行:Range(“C2”).CurrentRegion.Sort key1:=Range(“C2”)、order1:=xlAscending、Header:=xlGuess排序也需要半分钟。更改为“to 2”解决了数据排序后不丢失标题的问题,这将在不到一秒钟的时间内完成相同的100K行。请参阅编辑。谢谢您先生教育我并提供帮助。