什么VBA编码可以过滤和删除多个条件?

问题描述 投票:0回答:1

发帖希望我没有被火焰烤焦。坦白说,我是一个新手,尽管我已经尽力了,但罗马不是一天建成的,我陷入了困境。

我在其他地方得到了一些帮助,对这个人表示敬意,他们处于完全不同的时区,我不想轰炸他们。

我将一份报告从 Power BI 提取到 Excel 中。我现在的当前编码是删除底部 3 行,删除 A 列 (1) 中具有重复 PO 编号的行,过滤并删除 J 列 (10) 中除“已批准”之外的所有条目。这已经过测试并且效果很好。

还有数千行需要过滤和删除才能留下我想要的数据,这就是症结所在......

H 列(8)是原始程序中输入名称的地方。当采取行动时,我们会在其前面加上“R”前缀。不幸的是,每个同事似乎都有自己的方法来做到这一点,并且有多个条目需要尝试和完成。将多个 R 前缀方法与许多名称组合在一起并过滤/删除这些前缀条目成为每个人最糟糕的噩梦。还有一些其他前缀,但 R 绝对是我们生活的祸根。数千行。我们要从工作表中删除所有带前缀的条目。

最常见的主题是“R”后跟空格或连字符。下面是我迄今为止发现的内容的捕获,出于明显的原因,这里使用测试文本输入而不是名称(真实数据是为了反映我们想要保留的名称可能以 R 开头的位置,即 Rebecca 和 XX或 * 前缀是我们过滤和删除结果的另一个前缀):

R - Test Text
R Test Text
R-Test Text
RTest Text
Real Data
R-
R Test Text
R- Test Text
R_Test Text
XX Test Text
*Test Text

带有 RTest 文本的行可能必须手动完成,但所有其他实例是否可以通过 VBA 删除这些行,还是数量太多?

我尝试根据给定的一些信息尝试编码,但结果出现了严重错误,删除了我想要的所有内容,并留下了一些我不想要的条目。请看下面:

Option Explicit
Sub RsRemovalTest()
    Dim ws As Worksheet, LRow As Long
    Set ws = ActiveSheet
    LRow = ws.Cells.Find("*", , xlFormulas, , 1, 2).Row
    
    ws.Cells(LRow, 1).Offset(-2).Resize(3).EntireRow.Delete
    If ws.AutoFilterMode Then ws.AutoFilter.ShowAllData
    With ws.Range("A1").CurrentRegion
        .RemoveDuplicates Columns:=1, Header:=xlYes
        .AutoFilter 10, "<>Approved"
        If .SpecialCells(xlCellTypeVisible).Address <> .Rows(1).Address Then
            .Offset(1).EntireRow.Delete
        End If
        .AutoFilter 8, "R *", 2, "R-*", 3, "XX*"
        If .SpecialCells(xlCellTypeVisible).Address <> .Rows(1).Address Then
            .Offset(1).EntireRow.Delete
        End If
        .AutoFilter
    End With
    
End Sub

我会非常感激您的帮助,但如果新手不允许提问,我理解并感谢任何花时间阅读的人。

尝试在网上搜索信息,但我不知道我把东西放在哪里以及如何纠正被删除的错误信息。

vba filter delete-row excel-365
1个回答
0
投票

您需要高级过滤器才能使用多个条件。

看这里:如何在 Excel 中过滤多个条件?

如果您希望每次更改条件时自动触发过滤器,请使用此宏(将其放入工作表对象模块中):

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2:I5")) Is Nothing Then 'change range with filter criteria
        On Error Resume Next
        ActiveSheet.ShowAllData
        Range("A7").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion 'A7 is the first cell of filtered range, A1 is the first cell of range with criteria
    End If
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.