通过VBA删除excel中的第二行

时间:2018-08-09 07:38:34

标签: excel vba excel-vba

我想写一个代码,检查一张纸中有多少行,然后每隔两行删除一次。该过程应如下所示:

  1. 获取总行数
  2. 从最后一行开始,将其删除
  3. 上移两行,将其删除
  4. 到达第2行后,停止

这是我的代码,在第8行activeRow = activeRow - 2处停止工作。

Sub trendlucid()
    Dim numOfRows As Integer
    Dim activeRow As Integer
    numOfRows = Sheets(actualsheet).UsedRange.Rows.Count
    activeRow = numOfRows
    Do While activeRow > 1
        Rows(activeRow).EntireRow.Delete
        activeRow = activeRow - 2
    Loop
End Sub

我不知道为什么会停止。有人可以帮我吗?

谢谢你,祝你有美好的一天

3 个答案:

答案 0 :(得分:2)

删除行时,请环回:

Sub TestMe()

    Dim numOfRows As Long
    Dim activeRow As Long
    numOfRows = ActiveSheet.UsedRange.Rows.Count
    activeRow = numOfRows

    Dim i As Long

    For i = numOfRows To 1 Step -2
        ActiveSheet.Rows(i).EntireRow.Delete
    Next i

End Sub

删除行有一种更快的方法,如果先将行保存在一个范围内,最后删除范围。因此,您只能使用一次删除操作:

https://stackoverflow.com/a/50350507/5448626

答案 1 :(得分:1)

您的代码有两个缺陷

  1. 不确定表参考

    您要计算UsedRange的{​​{1}}行的数量 删除Sheets(actualsheet)行(R ActiveSheet中隐式引用的表)时

    因此请务必参考同一张纸(例如:ows(activeRow).EntireRow.Delete

  2. 不确定范围参考

    ActiveSheet可能从不同于第1行的行开始,而UsedRange考虑从第1行开始的行索引

    因此引用Rows(index) UsedRange而不是Rows()(隐含假设)ActiveSheet

所有这些总计为:

Rows()

答案 2 :(得分:0)

您必须尝试类似的操作...

您不需要将EntireRowRows一起使用,只需要Row Index,并且Delete动作将对整行执行。

Sub trendlucid()
    Dim numOfRows As Long
    Dim i As Long
    numOfRows = ActiveSheet.UsedRange.Rows.Count
    For i = numOfRows To 2 Step -2
        Rows(i).Delete
    Next i
End Sub