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

标签 vba excel

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

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

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

最佳答案

正如 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

关于vba - 过滤 2 个不相等的通配符。可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33577317/

相关文章:

vba - 具有可变结尾整数的 For 循环

vba - 根据范围有条件地更改 Excel VBA 条形图中各个条形的颜色

excel - 使用 VBA 将数据从 Excel 导出到 Access

excel - 使用 Inbox.Items.Restrict 在 Outlook 筛选器中查询未读邮件的 DSAL

c# - 如何使用 Open XML SDK(XLSX) 在 Excel 中创建数据透视表

Excel VBA : Can't find project or library

java - 使用 XSLT 从 XML 生成 EXCEL

excel - WScript.Shell Exec 的实时控制台输出

excel - 在一系列单元格中获取 5 个最常见的分隔子字符串

excel - 使用 If 宏查找具有特定文本的单元格