繁体   English   中英

通过VBA删除excel中的每隔一行

[英]Deleting every second row in excel via 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

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

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

删除行时,循环返回:

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. 不确定的表格参考

    当你删除ActiveSheet行时,你正在计算Sheets(actualsheet)UsedRange行数Sheets(actualsheet)隐式引用的表ows(activeRow).EntireRow.Delete

    所以一定要引用同一张表(例如: ActiveSheet

  2. 不确定的范围参考

    UsedRange可以从与行1不同的行开始,而Rows(index)考虑从行1开始的行索引

    所以引用UsedRange Rows()而不是ActiveSheet (隐式假设) Rows()

所有这些总结为:

Sub trendlucid()
    Dim numOfRows As Long ' use Long instead of Integer to avoid overflow issue for more thna some 32k rows or so
    Dim activeRow As Integer
    With ActiveSheet.UsedRange ' reference "active" sheet 'UsedRange' range
        numOfRows = .Rows.Count ' count the number of rows of referenced range
        activeRow = numOfRows
        Do While activeRow > 1
            .Rows(activeRow).EntireRow.Delete ' reference 'UsedRange' 'Rows()' instead of 'ActiveSheet' 'Rows()'
            activeRow = activeRow - 2
        Loop
    End With
End Sub

你必须尝试类似的东西......

您不需要对Rows使用EntireRow ,只需要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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM