Как удалить строки на основе таблицы Excel, используя значения столбцов - PullRequest
0 голосов
/ 19 апреля 2019

У меня есть Excel с 5 разных листов.sheet3 и sheet4 я хочу удалить строки на основе значения ячейки одного столбца.на листе 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" & i) = "#N/A" Then
        Range("B" & i).EntireRow.Delete
    End If
  Next
End Sub

Ответы [ 2 ]

0 голосов
/ 19 апреля 2019
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" & 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" & 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" & lastrow)

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

        End If

        Count = Count + 1

    Next

End Sub
0 голосов
/ 19 апреля 2019

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

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" & i).Text = "#N/A" Then
            Range("B" & i).EntireRow.Delete
        End If
    Next
End Sub

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

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

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

...