Usedrange属性并不是单元格的属性,它是工作表的属性,是返回工作表中已经使用了的单元格区域。
Sub hy()
ActiveSheet.UsedRange.Select
End Sub
- 怎么样工作表中的单元格才算是使用了?如图所示,设置了行高,就代表单元格使用过了,UsedRange就会跟着单元格使用的范围越来越大,其他的操作如定义格式,设置背景颜色等等都会被认为使用过单元格。
- UsedRange和CurrentRegion类似,有时候两个属性返回的单元格区域也是一样的。但要注意的是,两者的意义并不一样,返回的单元格区域要视实际情况而定。这里稍作提示,不多说。
- UsedRange在实际运用中主要用到的是UsedRange.Rows.Count,返回工作表中已使用单元格区域的行数。
例子:删除工作表中的所有空行。先看下图。
- 工作表中已使用的单元格区域是"$A$2:$F$16",工作表第1行并没有使用,最后的使用行行号是16,在第一张图片有木有看出来呢?
- 现在我们要删除工作表中所有多余的空行,如果使用UsedRange.Rows.Count,是不能够删除第16行的空行。倒循环的时候,R=UsedRange.Rows.Count=15,并不是真正的最后的‘使用了的行’。
For i = R To 1 Step -1
- 解决的方法是:
- 1、确定UsedRange的行数,如这里R=UsedRange.Rows.Count=15
- 2、确定确定UsedRange第一行的行号,使用UsedRange.Rows(1).Row
-
3、这里还需要注意的是,定义的变量R和RR都要为Long数据类型,因为Integer(-32768~32767)的范围太小,而07版excel有100多万行,远远超过了Integer的支持范围,这问题实际使用中常常发生出错。实际当中,定义为Long类型也比Integer类型效率要高。
LastRow = R + RR - 1 '行数+首行行号-1
'LastRow=15+2-1=16,通过这样计算,最终确定删除工作表中单元格区域的最后行号
Sub 删除所有空行()
Dim R As Long, RR As Long, i As Long, Counter As Long
Dim LastRow As Long '真正最后使用过的单元格行号
R = ActiveSheet.UsedRange.Rows.Count '使用过的行数
RR = ActiveSheet.UsedRange.Rows(1).Row '使用过的单元格区域首行行号
LastRow = R + RR - 1
Application.ScreenUpdating = False '关闭屏幕刷新
For i = LastRow To 1 Step -1
If Application.WorksheetFunction.CountA(Rows(i)) = 0 Then '如果是空行,那么
Rows(i).Delete '删除
Counter = Counter + 1 '计算空行数量
End If
Next i
Application.ScreenUpdating = True '开启屏幕刷新
MsgBox Counter & " 空行已删除"
End Sub