2015-07-24 4 views
1

Моих данных в столбце A, и я хочу, чтобы удалить все последующие строки, как в столбце B. кодаУдалить последовательные строки EXCEL VBA

If Range("A" & i).Value = Range("A" & i).Offset(1, 0).Value Then 
    Rows(i & ":" & i).Delete shift:=xlUp 
    End If 

я написал сценарий, но я не знаю, как поставить его в петля .. любая помощь спасибо.

enter image description here

+0

Как правило, удаление строк лучше всего достигается, начиная с нижней и двигаясь по направлению к вершине. Вы уверены, что хотите вернуться к первой строке? – Jeeped

+0

Это не матер, как я это делаю, но хочу закончить результаты, как показано в колонке «В», – Shan

ответ

0

Поскольку удаление строк занимает довольно много времени, наилучшим подходом для этой задачи является сбор всех строк, которые нужно удалить, в один объект класса Range с помощью функции Union, а затем удалить все из них с помощью одной операции.

Ниже приведен код представления, как это сделать:

Sub deleteConsecutiveRows() 
    Dim wks As Excel.Worksheet 
    Dim rng As Excel.Range 
    Dim row As Long 
    Dim lastRow As Long 
    '------------------------------------------------------------------------- 


    Set wks = Excel.ActiveSheet 


    With wks 
     lastRow = .Cells(.Rows.Count, 1).End(xlUp).row 

     For row = 2 To lastRow 
      If .Cells(row, 1).Value = .Cells(row - 1, 1).Value Then 

       If rng Is Nothing Then 
        Set rng = .Rows(row) 
       Else 
        Set rng = Excel.Union(rng, .Rows(row)) 
       End If 

      End If 
     Next row 

    End With 


    'In order to avoid Run-time error check if [rng] range is not empty, before removing it. 
    If Not rng Is Nothing Then 
     Call rng.EntireRow.Delete 
    End If 


End Sub 
0

Как правило, удаление строк лучше всего достигается, начиная с нижней и двигаясь по направлению к вершине. Это позволяет избежать «пропуски» строки при удалении, и строки сдвигаются вверх.

Dim rw As Long 

With Sheets("Sheet1") 
    For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1 
     If .Cells(rw, 1).Value = .Cells(rw - 1, 1).Value Then _ 
      .Rows(rw).Delete 
    Next rw 
End With 

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

Смежные вопросы