VBA - 删除For循环

时间:2016-02-01 22:03:37

标签: vba loops

我有两个问题:

1)

我在vba中运行for循环,它会搜索特定条件的行。如果满足该条件,它将从上面的行复制单元格的值(使用偏移函数)并将其粘贴到下面的单元格中。

然后我希望它删除上面的整行。我在将偏移功能与

组合时遇到问题
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

这有效,但我意识到如果有两个相邻的行应该同时删除,只会删除第一行。我认为这是因为第二行成为删除后的第一行,并作为循环中的迭代被跳过。

有没有简单的方法来解决这个问题?重要的是,行在循环开始之前保留它们所处的排序顺序。

谢谢!

1 个答案:

答案 0 :(得分:0)

使用向后循环的标准for循环。

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