在处理Excel表格数据时,有时候需要批量删除某一列数据中的空白行,此时可以有两种方案用VBA 进行操作:
1.用Excel自带的函数进行删除;
2.用循环的方法逐行删除;
下面结合实例来看看两种方法如何达到目的。
Case:需要删除工作表Sheets(“Data”)内的大量空白行。
1>.用Excel自带的函数进行删除
sub Del_rows()
Sheets("Data").Columns("A:A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
end sub
上述代码用Excel自带的函数进行删除,一行代码即可实现目的,简洁高效,而且速度也比较快(提高代码运行速度常用方法之一),但是缺点是不够灵活,如果某行部分单元格为空,该方法就不适用了。
2>用循环的方法逐行删除
sub Del_rows()
Imax=Sheets("Data").range("A100000").end(xlup).Row
For m = 1 To Imax
If Sheets("Data").Cells( m , 1) = "" Then
Rows(m).Delete
m = m - 1
Else
End If
Next m
end sub
上述代码用循环进行判断然后进行逐行删除,用if进行判断灵活性较大,但是多次循环在复杂的程序结构中显得比较冗杂和低效,而且需要注意循环计数,防止误删。
对于循环的办法,用二维数组可以提高代码运行速度的同时也可以实现相同的目的。
sub Del_rows()
Dim Ar as variant
Dim Imax as integer, m as integer
Imax=Sheets("Data").range("A100000").end(xlup).Row
Ar=Sheets("Data").range("A1",[A100000].end(xlup))
k=0
For m=1 to Imax
If Ar(m,1) = "" Then
Rows(m-k).Delete
k=k+1
Else
End If
Next m
end sub
用二维数组代码同样比较冗杂,但是速度已经快很多,这在复杂的程序设计中也是一种提高运行速度的办法。对于代码中的计数,还可以采用如下方法:
sub Del_rows()
Dim Ar as variant
Dim Imax as integer, m as integer
Imax=Sheets("Data").range("A100000").end(xlup).Row
Ar=Sheets("Data").range("A1",[A100000].end(xlup))
For m=1 to Imax
If Ar(m,1) = "" Then
Rows(m).Delete
m = m - 1
Else
End If
Next m
end sub
以上的办法可以实现批量删除excel中的空白行,如果想删除空白列将代码中的column换成rows,或者循环变量行换成列(1,m)及删除行换成Columns(m).Delete即可。
两种实现方法各有利弊,需要结合自己的应用场景进行选用,同时,代码的灵活性和速度也是需要进行考量的方面,更简洁、更灵活、运行速度更快的代码才能让我们的工作事半功倍,这也是VBA在Excel中高效实现复杂功能的基础。