删除全部为空列_VBA代码大全006:vba批量删除空单元格、空行、空列

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

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

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

比如下图所示的数据

de0c2afede22d3ead4fad5996cda1b46.png

如果用如下的代码删除:

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 WithEnd Sub

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

eff9bbbfe7efcfc0a3dd1fcdbd294853.png

出现这个情况的原因其实是当我们按照从上到下的顺序遍历删除空行时,由于行数在减少,导致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 WithEnd Sub
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值