Excel 2010 VBA 入门 040 批量删除空行

目录

示例:

实现代码1:

单元格删除Delete方法

单元格删除的通用算法

实现代码2

利用Union获取整个单元格区域进行统一操作

Union方法的注意事项

单元格插入Insert方法

示例:

    如图所示,该表为某公司入库流水账,由于工作人员疏忽,在记录中产生了许多空行。现在需要做统计,希望能够将这些空行批量删除,该如何用VBA实现?

日期/时间产品数量
2012/10/29产品183
2012/10/30产品1184
   
2012/11/1产品346
2012/11/2产品397
2012/11/3产品184
2012/11/4产品147
   
   
2012/11/7产品3187
2012/11/8产品184
2012/11/9产品2105
2012/11/10产品2128
   
2012/11/12产品33
2012/11/13产品3141
2012/11/14产品2145
2012/11/15产品2194
2012/11/16产品1174
2012/11/17产品217
   
2012/11/19产品3151
2012/11/20产品1115
2012/11/21产品2187
2012/11/22产品2190
2012/11/23产品1166
2012/11/24产品242
2012/11/25产品1133
2012/11/26产品1188
2012/11/27产品276
2012/11/28产品3172
2012/11/29产品320
2012/11/30产品223
2012/12/1产品244
2012/12/2产品1159
2012/12/3产品156

实现代码1:

Option Explicit

Sub 批量删除空行1()
    Dim RowN As Long
    For RowN = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1
        If WorksheetFunction.CountA(Intersect(Rows(RowN), Columns("A:C"))) = 0 Then
            Rows(RowN).Delete shift:=xlShiftUp
        End If
    Next
End Sub

单元格删除Delete方法

单元格删除需要执行Delete方法,其语法为

Rng.Delete (Shift)

    其中,Rng为所需删除的单元格。可选参数Shift可以为xIShiftToLeft(删除后右侧单元格左移)或xIShiftUp(删除后下方单元格上移)。当省略该参数时,Excel将根据Rng所表示的单元格形状进行判断。实质上,删除整行时,默认为xIShiftUp。

单元格删除的通用算法

    批量删除行时,所执行的循环必须按照从下往上的顺序进行循环。如本例中,若按照从第2行至最后一行循环的顺序进行,将会发生以下情况:
    当RowN为8时,程序判断为空行,执行删除操作后,第8行以下所有的行均上移一行。进入下一次循环时,RowN为9时,由于原先的空行(第9行)将会变为第8行(如图所示),程序将不再进行判断。因而该方法会导致空行删除不彻底,开发者应避免此类错误的发生。
《Excel 2010 VBA 入门 040 批量删除空行》

实现代码2

Sub 批量删除空行2()
    Dim RowN As Long
    Dim Rng As Range
    For RowN = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        If WorksheetFunction.CountA(Intersect(Rows(RowN), Columns("A:C"))) = 0 Then
            If Rng Is Nothing Then
                '若Rng未赋值,则设置Rng为当前行
                Set Rng = Rows(RowN)
            Else
                '若Rng已赋值,则设置Rng为当前行与原Rng的合并区域
                Set Rng = Union(Rng, Rows(RowN))
            End If
        End If
    Next
    '若空行存在,则删除
    If Not Rng Is Nothing Then Rng.Delete shift:=xlShiftUp
    
End Sub

利用Union获取整个单元格区域进行统一操作

    本解决方案是单元格批量操作经常使用的手段:利用1个变量Rng表示所有需要处理的单元格的集合,然后利用Union方法不断将满足条件的单元格添加到该集合中来。

Union方法的注意事项

    在使用Union方法时需注意,由于Rng初始值为Nothing,若参数也为Nothing,将产生如图所示的运行时错误。为避免该错误的发生,应对Rng对象进行判断,若其为Nothing,就应直接赋值,而不使用Union方法。

《Excel 2010 VBA 入门 040 批量删除空行》

单元格插入Insert方法

与删除方法对应的是单元格插入Insert方法,其语法为

Rng.Insert (Shift,Copyorigin)

    其中,Rng为单元格对象,该单元格对象指定了插入单元格的位置和大小,当执行插入操作后,将会在Rng所表示的单元格或单元格区域的相同位置插入相同大小的空白单元格。
    参数Shift表示Rng所表示的单元格对象在插入新单元格后的移动方向,可以为xIShiftToRight(活动单元格右移)或者xIShiftDown(活动单元格下移)。
    CopyOrigin表示插入的单元格的格式设置,可以为xlFormatFromRightOrBelow,表示新单元格格式与Rng所表示的单元格区域最下行的下一行或最右列右一列的格式相同,或者xIFormatFromLef tOrAbove,表示新单元格格式与Rng所表示的单元格最上行的上一行或最左列的左一列格式相同。
 

 

 

    原文作者:ngbshzhn
    原文地址: https://blog.csdn.net/ngbshzhn/article/details/115689167
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞