简体   繁体   中英

Excel VBA need to remove all rows with the #REF! value

I have the following code that looks for values with the word "Record" in column L and then copies the row to a separate sheet.

I am getting a type-mismatch error on rows where the value #REF! occurs in column L.

What is the best way to amend the following in order to completely delete those rows and then continue the intended function?

NB LastRow is of 'Long' variable type

Sheets("Demand").Rows("1").Copy Sheets("Data").Range("A1")

With Sheets("Demand")

LastRow = .Range("A" & .Rows.Count).End(xlUp).Row

pasteRowIndex = 2

 For r = 1 To LastRow
        If LCase(.Cells(r, "L").Value) Like LCase("Record*") Then
          If UBound(Split(.Cells(r, "L"), ",")) > 0 Then
              i = i + 1
              ReDim v(1 To i)
              v(i) = pasteRowIndex
              End If

          Sheets("Demand").Rows(r).Copy Sheets("Data").Rows(pasteRowIndex)
         pasteRowIndex = pasteRowIndex + 1
      End If
 Next r
End With

First, you need to iterate from last to first row:

For r = LastRow to 1 step -1

    'Next, add if statement inside the loop checking if cell returns error:
    If IsError(.Cells(r, "L").Value) then

        'if so, delete this row:
        .Cells(r, "L").entirerow.delete

    '..... the rest of your code as ElseIf part of conditional statement

    ElseIf LCase(.Cells(r, "L").Value) Like LCase("Record*") Then
      If UBound(Split(.Cells(r, "L"), ",")) > 0 Then
          i = i + 1
          ReDim v(1 To i)
          v(i) = pasteRowIndex
          End If

      Sheets("Demand").Rows(r).Copy Sheets("Data").Rows(pasteRowIndex)
     pasteRowIndex = pasteRowIndex + 1
    End If
 Next r

Like this...

For r = 1 To LastRow
    If Not IsError(.Cells(r, "L").Value) Then
        If LCase(.Cells(r, "L").Value) Like "record*" Then
            If UBound(Split(.Cells(r, "L"), ",")) > 0 Then
                i = i + 1
                ReDim v(1 To i)
                v(i) = pasteRowIndex
            End If

            Sheets("Demand").Rows(r).Copy Sheets("Data").Rows(pasteRowIndex)
            pasteRowIndex = pasteRowIndex + 1
        End If
    End If
Next r

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM