VBA:在VLOOKUP周围循环,成功删除行

时间:2018-11-26 20:04:46

标签: excel vba excel-vba vlookup

我正在尝试环回Excel 365中工作表中的数据,并在满足某些条件时,删除该条件适用的行。直到我将工作簿VLookUp函数用作最终条件的一部分,一切都很好-如果任何条件为真或VLookup成功,则需要删除该行(VLookUp中的错误意味着该行应为保持)。我目前拥有的是:

On Error Resume Next
divFile = "C:\....\workbook.xlsx"
Set divWorkbook = Workbooks.Open(divFile)
Set divRange = divWorkbook.Worksheets("Sheet3").Range("B2:B274")

For i = lastRow To firstDataRow Step -1
    If Condition1 Or _
       Condition2 Or _
       WorksheetFunction.VLookup(Cells(i, lcCol).Value, divRange, 1, False) Then
        If Err.Number = 0 Then
            Rows(i).Delete
        End If
   End If
Next i

上面的内容跳到了另一个工作簿(divWorkbook),并且没有执行预期的工作。我将如何专注于当前的工作簿和工作表,并在vlookup成功时(而不是失败时)应用删除?

谢谢, 本

1 个答案:

答案 0 :(得分:2)

我将放下On Error Resume Next,而改用Application.Match,测试返回值是否有错误。

另外,正如@ cybernetic.nomad所指出的那样,请更加明确地说明您正在处理的是哪种工作表。

Dim shtData As Worksheet

Set shtData = ActiveSheet ' or whatever

divFile = "C:\....\workbook.xlsx"
Set divWorkbook = Workbooks.Open(divFile)
Set divRange = divWorkbook.Worksheets("Sheet3").Range("B2:B274")

For i = lastRow To firstDataRow Step -1
    If Condition1 Or Condition2 Or _
       Not IsError(Application.Match(shtData.Cells(i, lcCol).Value, divRange, 0)) Then

            shtData.Rows(i).Delete

   End If
Next i