【问题标题】:Create an Excel Macros to Delete Rows based on the selected cells in a Sheet根据工作表中的选定单元格创建 Excel 宏以删除行
【发布时间】:2016-12-08 17:35:32
【问题描述】:

我创建了一个宏,但它并没有真正起作用,因为在删除过程中行实际上发生了变化。用户选择表格中的任意 # 个单元格。在运行宏时,仅删除属于所选单元格的那些行。到目前为止,这是我所做的:

Sub DeleteSelectedRows()
Dim Cell As Range
With Sheet1
For Each Cell In Selection
        .Range(Cell.Address).EntireRow.Delete
Next Cell
End With
End Sub

任何帮助将不胜感激。

【问题讨论】:

  • 你只需要Selection.EntireRow.Delete 不需要循环。

标签: excel vba


【解决方案1】:

修改集合时不要使用For Each 循环,使用更简单的For 循环,从最后一行索引(或列索引)开始,然后返回到第一个索引。

确保循环设置为 Step -1 以向后移动。向后方向是必需的,因为在 Excel 中,当您删除一行/列时,剩余的行/列向上/向左移动,因此在第一次编辑后所有进一步的索引可能都是错误的。

Dim rng as Range
Set rng = Selection

Dim firstRow as Integer
Dim lastRow as Integer

firstRow = rng.Row   
lastRow = rng.Rows(rng.Rows.Count).Row

Dim i as Integer   
For i = lastRow to firstRow Step -1
     Call ActiveSheet.Rows(i).Delete()    
Next i

【讨论】:

  • 感谢当用户高度多行时,这比 Selection.areas 效果更好。非常感谢
【解决方案2】:

在某些(可能很少见)情况下,用户可以通过 ctrl+单击来选择不连续的范围。此代码将考虑这种可能性,同时仍仅删除实际选择的行:

Sub DeleteSelectedRows()

    Dim rArea As Range

    For Each rArea In Selection.Areas
        rArea.EntireRow.Delete
    Next rArea

End Sub

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2015-07-09
    相关资源
    最近更新 更多