VBA代码大全006:如何用vba删除空单元格、空行、空列?

vba代码有95%最终的目的都是回归到对excel工作表内容的修改、删除或增加。

其中删除空行、空列经常是一个vba解决方案中需要处理的步骤。

很多人会以为这个很简单,只要通过循环处理就可以轻松实现。

比如下图所示的数据

如果用如下的代码删除:

Sub 批量删除空行空列()
Dim oWK As Worksheet
Set oWK = Excel.ActiveSheet
With oWK
iRow = .Range("a65536").End(xlUp).Row
iCol = .Cells(1, 256).End(xlToLeft).Column
For i = 1 To iRow
If Excel.Application.WorksheetFunction.CountA(.Range("a" & i).EntireRow) = 0 Then
.Range("a" & i).EntireRow.Delete
End If
Next i
End With
End Sub

运行代码后会发现,空行没有删除干净,如下图所示:

出现这个情况的原因其实是当我们按照从上到下的顺序遍历删除空行时,由于行数在减少,导致i的值无法精准匹配下一个要遍历的行,从而出现漏删除的情况。

要实现精准的全部删除空行,应该采用逆序遍历法,也就是从下到上或者从右到左的顺序依次删除空行和空列,这样就可以保证每次删除空行或者空列以后不会影响遍历的变量i。

代码如下:

Sub 批量删除空行空列()
'QQ:1722187970,微信:xycgenius,公众号:水星excel
Dim oWK As Worksheet
Set oWK = Excel.ActiveSheet
With oWK
iRow = .Range("a65536").End(xlUp).Row
iCol = .Cells(1, 256).End(xlToLeft).Column
'逆序删除行
For i = iRow To 1 Step -1
If Excel.Application.WorksheetFunction.CountA(.Range("a" & i).EntireRow) = 0 Then
.Range("a" & i).EntireRow.Delete
End If
Next i
'逆序删除列
For i = iCol To 1 Step -1
If Excel.Application.WorksheetFunction.CountA(.Cells(1, i).EntireColumn) = 0 Then
.Cells(1, i).EntireColumn.Delete
End If
Next i
End With
End Sub
       

发表评论