首页 > 解决方案 > 根据多列和多个条件删除行

问题描述

我有一个excel表,我正在尝试。根据以下条件编写 VBA 代码以从 excel 表中删除行:
如果 A 列包含字符串“string1”和“string2”。

如果 B 列包含字符串“string3”或“string4”

我使用以下代码:

Sub DeleteRows()
    Dim rng As Range
    Dim pos As Integer
    Set rng = ActiveSheet.UsedRange
    
    For i = rng.Cells.Count To 1 Step -1
        pos = InStr(LCase(rng.Item(i).Value), "string1"))
        If pos > 0 Then
            rng.Item(i).EntireRow.Delete
        End If
    Next i
End Sub

但是如果单个字符串位于任何列中,它只会删除行,并且我无法指定要搜索的列名。

任何帮助表示赞赏。谢谢,

标签: excelvba

解决方案


问题在于您的循环 - 您正在循环遍历Item范围中的每个,而不是每一行

试试下面的

Sub DeleteRows()
    Dim rng As Range
    Dim rownum As Long
    Set rng = ActiveSheet.UsedRange
    
    For rownum = rng.rows.Count To 1 Step -1
        If LCase(Rng.Cells(rownum, 1) Like "*String1*" And _
        LCase(rng.Cells(rownum, 1) Like "*String2*" Or _
        LCase(rng.Cells(rownum, 2) Like "*String3*" Or _
        LCase(rng.Cells(rownum, 2) Like "*String4*" Then
            rng.Cells(rownum, 1).EntireRow.Delete
        End If
    Next
End Sub

推荐阅读