Удалить определенные строки в листе Excel с VBA - PullRequest
0 голосов
/ 09 октября 2018

У меня есть таблица с несколькими столбцами.Я хотел бы удалить определенные строки в таблице.Логика для удаления следующая:

Если в столбце B одна ячейка содержит определенное значение, давайте придерживаться «примера» для этого случая, я хотел бы удалить следующие две строки после строки (й)которые соответствовали критериям.

Важно отметить, что критерии могут появляться в таблице несколько раз и что таблица может иметь различную длину.

Моя идея заключалась в следующем:

1. Identify all rows which contain "example" in column B
2. Store the row numbers in a variable
3. Go through the variable and create a new one which has twice the length of the first one and write the two following rows into the 2nd variable
4. Use the 2nd variable to delete the rows with that numbers.

К сожалению, я совершенно новичок в VBA и не смог его кодировать.Я также пытался скопировать код вместе, но не смог найти решение для своей конкретной темы.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Это очень легкий мод для вашего подхода

  • , начиная с низ столбца B , работа вверх.
  • если мы встретим "пример" , удалите две строки ниже

Так, если строка № 7 содержит "пример" , удалите строку № 7 и строку №8

До:

enter image description here

Код:

Sub RowKiller()
    Dim N As Long, i As Long, t As String
    t = "example"
    N = Cells(Rows.Count, "B").End(xlUp).Row

    For i = N To 1 Step -1
      If Cells(i, "B") = t Then
          Range(Cells(i + 1, "B"), Cells(i + 2, "B")).EntireRow.Delete
      End If
    Next i
End Sub

и после:

enter image description here

0 голосов
/ 09 октября 2018

Я думаю, что вместо этого лучший способ справиться с этим:

  1. Цикл по всем заполненным строкам от последнего к первому.(это гарантирует, что мы не вытаскиваем коврик из-под нас при удалении строк).
  2. Если в столбце B этой строки обнаружен «Пример», удалите две строки после него (мы уже прошлиудаление этих строк не должно иметь большого значения
  3. Вот так.

    Sub deleteRows ()

     Dim lastRow as Long
     'get the last row
     lastRow = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
    
     'Now work backwards
     Dim i As Long
     For i = lastRow to 1 Step -1 'change that 1 to whatever your first row is
         If Sheet1.Cells(i, 2).value = "Example" Then
             Sheet1.Rows(i + 1 & ":" & i + 2).Delete
         End If
     Next i
    

    End Sub

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...