Excel VBA删除范围内的空白行

Posted

技术标签:

【中文标题】Excel VBA删除范围内的空白行【英文标题】:Excel VBA to delete blank rows within a range 【发布时间】:2017-02-15 07:18:52 【问题描述】:

我的工作表的数据从 A84 开始,延伸到 X 列。我使用此 VBA 选择整个数据范围。

Dim Lastrow As Integer
Lastrow = Range("A:Z").Find("*", , , , xlByRows, xlPrevious).Row

Range("A84:X" & Lastrow).Select

在该选定范围内,我需要它来检测从 A 列到 Z 列的哪些行是空白的并删除它们。如果 Z 列之后有数据,则应该删除该行,因为我认为它是空白的。

【问题讨论】:

向后循环遍历范围行:For i = Lastrow to 84 step -1 然后:If Application.WorkSheetFormula.CountA(Range(Cells(i,1),Cells(i,26)))=0 Then Rows(i).Delete @ScottCraner 对不起。我可能做错了什么,但运行时出现语法错误。 错误在哪一行? 它只是说If Application.WorkSheetFormula.CountA(Range(Cells(i,1),Cells(i??,26)))=0 Then Rows(i).Delete的“编译错误:语法错误” 【参考方案1】:

cmets 有时会添加字符。代码如下:

Dim Lastrow As Integer
Lastrow = Range("A:Z").Find("*", , , , xlByRows, xlPrevious).Row


For i = Lastrow To 84 Step -1
    If Application.CountA(Range(Cells(i, 1), Cells(i, 26))) = 0 Then Rows(i).Delete
Next i

【讨论】:

现在我收到此错误:运行时错误“438”:对象不支持此属性或方法。这就是突出显示的内容:If Application.WorkSheetFormula.CountA(Range(Cells(i, 1), Cells(i, 26))) = 0 Then 等等。应该是 Application.WorkSheetFunction 而不是 ApplicationWorkSheetFormula?我做了那个改变,它起作用了。 @Robby 这就是我在答案中输入的结果。是的,或者像上面的编辑。完全删除 WorkSheetFunction 部分。 @Robby 记得通过单击答案旁边的复选标记将其标记为正确。 在对此进行了更多测试后,我在使用 Excel 2010 时遇到了一个问题:如果我在运行此代码时看到空白行,它总是会删除该行。但是如果在运行代码时空白行不在视图中,有时它不会删除该行。相反,它只是从灰色单元格中删除了行号,我认为这很奇怪。我通过在倒数第二行包含 WorkSheetFunction 位解决了这个错误。

以上是关于Excel VBA删除范围内的空白行的主要内容,如果未能解决你的问题,请参考以下文章

[No0000C1]Excel 删除空白行和空白列VBA代码

Excel VBA - 如何选择范围向下到第一个空白单元格

删除空白单元格

如果在excel VBA中判断A列中的空白单元格,遇到后就终止程序

如果一个字段为空/空白,则尝试使用 VBA 删除整行

如何在excel里批量删除空白行列?