Excel VBA宏,从列中删除包含关键字的行

Excel VBA宏,从列中删除包含关键字的行,excel,vba,loops,keyword,Excel,Vba,Loops,Keyword,我正试图为VBA编写一个宏,它将遍历其中一列(比如D),并将其中的名称与我将在第2页上列出的排除列表进行比较。然后,is需要删除包含匹配单词的行并向上移动列表,直到整个列表中没有包含这些单词的行 就我所知,在这里,但出于某种原因,它什么都没做 Sub Delete_Exeptions() x = 2 Do While ThisWorkbook.Sheets("List1").Cells(x, 4) <> "" i = 11

我正试图为VBA编写一个宏,它将遍历其中一列(比如D),并将其中的名称与我将在第2页上列出的排除列表进行比较。然后,is需要删除包含匹配单词的行并向上移动列表,直到整个列表中没有包含这些单词的行

就我所知,在这里,但出于某种原因,它什么都没做

    Sub Delete_Exeptions()
     x = 2
     Do While ThisWorkbook.Sheets("List1").Cells(x, 4) <> ""
        i = 11
        Do While ThisWorkbook.Sheets("List2").Cells(i, 1) <> ""
           If ThisWorkbook.Sheets("List1").Cells(x, 4).Value = ThisWorkbook.Sheets("List2").Cells(i, 1).Value Then ThisWorkbook.Sheets("List1").Cells(x, 4).EntireRow.Delete
           i = i + 1
        Loop

        x = x + 1
     Loop
Sub-Delete_-exptions()
x=2
执行此工作簿.Sheets(“列表1”).Cells(x,4)”时
i=11
执行此工作簿.Sheets(“列表2”).Cells(i,1)”时
如果ThisWorkbook.Sheets(“List1”).Cells(x,4).Value=ThisWorkbook.Sheets(“List2”).Cells(i,1).Value,则ThisWorkbook.Sheets(“List1”).Cells(x,4).EntireRow.Delete
i=i+1
环
x=x+1
环
如果有人没有注意到,这一次效果很好:

Sub Delete_Exeptions()
     x = 2
    Do While ThisWorkbook.Sheets("List1").Cells(x, 4) <> ""



        i = 11
        Do While ThisWorkbook.Sheets("List2").Cells(i, 1) <> ""


            If ThisWorkbook.Sheets("List1").Cells(x, 4).Value <> ThisWorkbook.Sheets("List2").Cells(i, 1).Value Then

            Else: ThisWorkbook.Sheets("List1").Cells(x, 4).EntireRow.Delete


            End If
            i = i + 1
        Loop

       x = x + 1
    Loop

End Sub
Sub-Delete_-exptions()
x=2
执行此工作簿.Sheets(“列表1”).Cells(x,4)”时
i=11
执行此工作簿.Sheets(“列表2”).Cells(i,1)”时
如果ThisWorkbook.Sheets(“List1”).Cells(x,4).值ThisWorkbook.Sheets(“List2”).Cells(i,1).值,则
其他:ThisWorkbook.Sheets(“List1”).Cells(x,4).EntireRow.Delete
如果结束
i=i+1
环
x=x+1
环
端接头
这是最后一个eddit,我已经按照建议进行了更改,所以第一个循环从最后一行转到第一行,就像我在一行中有两个排除时遇到的问题一样。但我决定不使用其他推荐的方法(Match和CurentRegion),因为它们对我来说并不真正有效

Sub Test_Bottom_toup()

Dim str As String
Dim strArr() As String
Dim ws As Worksheet
Dim lRow As Long

Set ws = ThisWorkbook.Sheets("List1")

With ws
    lRow = .Range("D" & .Rows.Count).End(xlUp).Row
End With

x = lRow
    Do While x <> 1


    str = ThisWorkbook.Sheets("List1").Cells(x, 4)
    strArr = Split(str, " - ")
    ' This one is for my data spesifically as I had a random number before actual name, which might not be on the list of exlusions.

    i = 11

     Do While ThisWorkbook.Sheets("List2").Cells(i, 1) <> ""

     If strArr(1) <> ThisWorkbook.Sheets("List2").Cells(i, 1) Then

     Else: ThisWorkbook.Sheets("List1").Cells(x, 4).EntireRow.Delete


     End If

     i = i + 1
     Loop

    x = x - 1
    Loop
Sub-Test\u-Bottom\u-toup()
作为字符串的Dim str
Dim strArr()作为字符串
将ws设置为工作表
暗淡的光线和长的一样
设置ws=ThisWorkbook.Sheets(“列表1”)
与ws
lRow=.Range(“D”和.Rows.Count).End(xlUp).Row
以
x=lRow
当x1时做什么
str=ThisWorkbook.Sheets(“列表1”).单元格(x,4)
strArr=拆分(str,“-”)
“这是我的数据,因为我在实际姓名之前有一个随机数,可能不在排除列表中。
i=11
执行此工作簿.Sheets(“列表2”).Cells(i,1)”时
如果strArr(1)此工作簿.Sheets(“列表2”).Cells(i,1),则
其他:ThisWorkbook.Sheets(“List1”).Cells(x,4).EntireRow.Delete
如果结束
i=i+1
环
x=x-1
环

End Sub

您是否尝试过使用调试器单步执行?哪里没有达到你的期望?它是否适当地通过了循环?条件是否正常工作?不要将代码放入注释中。这几乎是不可读的。将其编辑到原始问题中。删除行时请注意。它会影响指数。这个问题经常出现。您最好使用Worksheetfunction匹配,而不是第二个do循环。其次,最好从列表的底部开始,因为删除行时,计数器(x)将不再正确。最后,您可以使用CurrentRegion方法来确定需要循环的行数,这也可以通过步骤-1进行for next循环,并省去检查单元格值与空值的麻烦。您能解释一下为什么它不起作用(计数器(x)部分)。我试过多个例子,效果不错,但如果你说这会带来麻烦,我现在更清楚了。请,谢谢。您尝试过使用调试器吗?哪里没有达到你的期望?它是否适当地通过了循环?条件是否正常工作?不要将代码放入注释中。这几乎是不可读的。将其编辑到原始问题中。删除行时请注意。它会影响指数。这个问题经常出现。您最好使用Worksheetfunction匹配,而不是第二个do循环。其次,最好从列表的底部开始,因为删除行时,计数器(x)将不再正确。最后,您可以使用CurrentRegion方法来确定需要循环的行数,这也可以通过步骤-1进行for next循环,并省去检查单元格值与空值的麻烦。您能解释一下为什么它不起作用(计数器(x)部分)。我试过多个例子,效果不错,但如果你说这会带来麻烦,我现在更清楚了。请,谢谢。您尝试过使用调试器吗?哪里没有达到你的期望?它是否适当地通过了循环?条件是否正常工作?不要将代码放入注释中。这几乎是不可读的。将其编辑到原始问题中。删除行时请注意。它会影响指数。这个问题经常出现。您最好使用Worksheetfunction匹配,而不是第二个do循环。其次,最好从列表的底部开始,因为删除行时,计数器(x)将不再正确。最后,您可以使用CurrentRegion方法来确定需要循环的行数,这也可以通过步骤-1进行for next循环,并省去检查单元格值与空值的麻烦。您能解释一下为什么它不起作用(计数器(x)部分)。我试过多个例子,效果不错,但如果你说这会带来麻烦,我现在更清楚了。谢谢你。