首页 > 解决方案 > 删除行后更改选择?

问题描述

 Loop through multiple selection areas (r = 1 to n)
   Delete rows in area r
 Next area

注意
选择可以是不连续的,并且可以是任何(垂直)顺序。即,区域 1 可以是第 8-10 行,区域 2 可以是第 2-3 行,区域 3 可以是第 14-18 行。选定的单元格区域不应重叠以防止错误。

问题
在一个区域中执行行删除会导致下面的所有数据上移。下面的选定区域不会移动。因此,新数据(您不想删除)会滚动到选定区域。

例子

Row 1: A B C
Row 2: D E F  (Select R2C1:R2C3 first)
Row 3: G H I
Row 4: J K L  (CTRL Select R4C1:R4C3 next)
Row 5: M N O

选择了 2 个区域。我们希望删除第 2 行和第 4 行。

代码

For aCounter = 1 to Selection.Areas.Count
   Selection.Areas(aCounter).EntireRow.Delete
Next

结果

Row 1: A B C
Row 2: G H I  (This row is selected)
Row 3: J K L
Row 4: (blank) (This row is also selected)
Row 5: (blank)

发生了什么
选择的第一个区域 (Areas(1)) 是第 2 行,已被删除。第 3-5 行卷起,但第 2 行仍保留在第 4 行。这意味着 JKL 进入第 3 行,而 MNO 进入第 4 行。在下一个循环中,Areas(2) 仍设置为第 4 行,因此 MNO 是删除。

应该发生什么
Areas(2) 应该已经移动了删除的行数。

问题
有没有一种方法可以轻松编写代码,而无需遍历所有区域,检查它们是否低于已删除的行,并在每次删除一行时将它们向上移动删除的行数?

标签: vbaexcel

解决方案


从底部开始,向上删除行。

例如:

  For aCounter = Selection.Areas.Count To 1 Step -1
     Selection.Areas(aCounter).EntireRow.Delete
  Next

推荐阅读