Как удалить строки на основе таблицы Excel, используя значения столбцов

#excel #vba #row #cell

#excel #vba #строка #ячейка

Вопрос:

У меня есть Excel с 5 разными листами. лист3 и лист4 я хочу удалить строки на основе значения ячейки одного столбца. на листе 3 я хочу удалить строки на основе значений ячеек столбца H, если H2 = «# N / A» и H503 = «# N / A», затем удалить целые строки. на листе 4 я хочу удалить строки на основе значений ячеек столбца b, если B2 =»320857876″, B3 =»32085678″, B4 = «12133435», удалите все строки, где значения ячеек столбца B начинаются с 302. и я хочу удалить все данные из столбца ‘C’ в моем Excelлист выглядит так

Использование файла Excel

 Sub Create()
  Dim LastRow As Long
  Dim i As Long

  LastRow = Range("B10000").End(xlUp).Row
  For i = LastRow To 1 Step -1
    If Range("B" amp; i) = "#N/A" Then
        Range("B" amp; i).EntireRow.Delete
    End If
  Next
End Sub
 

Ответ №1:

У вас есть несколько требований, и ваш код довольно легкий, но что касается #N/A его части, вы не можете просто проверить этот текст, используя подход value, который является свойством по умолчанию, возвращаемым для объекта range.

 Sub Create()
    Dim LastRow As Long, i As Long

    LastRow = Range("B10000").End(xlUp).Row

    For i = LastRow To 1 Step -1
        If Range("B" amp; i).Text = "#N/A" Then
            Range("B" amp; i).EntireRow.Delete
        End If
    Next
End Sub
 

… вам нужно использовать .Text , чтобы заставить это работать, или, If IsError(Range("B" amp; i)) Then это другой подход.

Остальные ваши требования — это просто логика. Остальная часть вашего кода относительно надежна, поэтому вам просто нужно с ней поработать.

Надеюсь, это поможет.

Ответ №2:

 Sub delete_rows()

    Dim sheet As Worksheet, cell As Range

    Count = 1
    For Each sheet In ThisWorkbook.Worksheets
        If Count = 3 Then
            lastrow = sheet.Cells(sheet.Rows.Count, "H").End(xlUp).Row
            Set Rng = sheet.Range("H1:H" amp; lastrow)

            For i = Rng.Cells.Count To 1 Step -1
                If Application.WorksheetFunction.IsNA(Rng(i).Value) Then
                    Rng(i).EntireRow.Delete
                ElseIf Rng(i).Value = "#NA" Then
                    Rng(i).EntireRow.Delete
                End If
            Next

        ElseIf Count = 4 Then
            lastrow = sheet.Cells(sheet.Rows.Count, "B").End(xlUp).Row
            Set Rng = sheet.Range("B1:B" amp; lastrow)
            Debug.Print (Rng(4).Text)

            If Rng(2).Value = "320857876" And Rng(3).Value = "32085678" And Rng(4).Value = "12133435" Then
                For i = Rng.Cells.Count To 1 Step -1
                    If Left(Rng(i).Value, 3) = "302" Then
                        Rng(i).EntireRow.Delete
                    End If
                Next
            End If

            lastrow = sheet.Cells(sheet.Rows.Count, "C").End(xlUp).Row
            Set Rng = sheet.Range("C1:C" amp; lastrow)

            For Each cell In Rng
                cell.Value = ""
            Next cell

        End If

        Count = Count   1

    Next

End Sub