2016-02-01 4 views
0

У меня есть две проблем:VBA - Удалить смежную строку в цикле

1)

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

Затем я хочу, чтобы он удалил всю строку выше. У меня возникают проблемы, сочетающую функции смещения с

entirerow.delete 

Я получаю ошибку является просто «Ошибка синтаксиса»

Вот код:

Sub rowdelete() 

maxrow = ActiveSheet.UsedRange.Rows.Count 



For Each rcell In Range("A2:A" & maxrow) 
    If rcell.Value = "--" Then 
    rcell.offset(-1,).EntireRow.Delete 

End If 
Next rcell 

End Sub 

2), играя с синтаксиса Устранение неполадок, я попытался просто запустить rcell.entirerow.delete

Это сработало, но я понял, что есть две соседние строки, которые должны быть удалены только первый будет удален. Я предполагаю, что это потому, что вторая строка становится первой строкой после удаления и пропускается как итерация в цикле.

Есть ли простые способы обойти это? Важно, чтобы строки сохраняли порядок сортировки, в котором они находятся, до начала цикла.

Спасибо!

+0

ли мой ответ для вас работу? Если это так, то, пожалуйста, отметьте как правильно, щелкнув зеленую галочку рядом с ответом. Это то, что вы можете сделать. Это закроет вопрос. –

ответ

0

Используйте стандартный цикл для петли назад.

Sub rowdelete() 
dim maxrow as long 
dim i as long 

maxrow = ActiveSheet.UsedRange.Rows.Count 

For i = maxrow To 2 Step -1 
    If Cells(i, 1).Value = "--" Then 
    Rows(i - 1).Delete 

    End If 
Next i 

End Sub 

другой способ поместить все строки в одном диапазоне и удалить его сразу:

Sub rowdelete() 
Dim maxrow As Long 
Dim i As Long 
Dim rng As Range 

maxrow = ActiveSheet.UsedRange.Rows.Count 

For i = maxrow To 2 Step -1 
    If Cells(i, 1).Value = "--" Then 
    Set rng = Union(rng, Rows(i - 1)) 
    End If 
Next i 
rng.Delete xlShiftUp 
End Sub 
Смежные вопросы