我有两个问题:
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
这有效,但我意识到如果有两个相邻的行应该同时删除,只会删除第一行。我认为这是因为第二行成为删除后的第一行,并作为循环中的迭代被跳过。
有没有简单的方法来解决这个问题?重要的是,行在循环开始之前保留它们所处的排序顺序。
谢谢!
答案 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