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代码