美文网首页
12、[VBA入门到放弃笔记] Usedrange属性

12、[VBA入门到放弃笔记] Usedrange属性

作者: 叶知行 | 来源:发表于2017-06-09 19:34 被阅读745次

Usedrange属性并不是单元格的属性,它是工作表的属性,是返回工作表中已经使用了的单元格区域。

Sub hy()
ActiveSheet.UsedRange.Select
End Sub
Paste_Image.png
  • 怎么样工作表中的单元格才算是使用了?如图所示,设置了行高,就代表单元格使用过了,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
Paste_Image.png
  • 解决的方法是:
  • 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
结果

相关文章

网友评论

      本文标题:12、[VBA入门到放弃笔记] Usedrange属性

      本文链接:https://www.haomeiwen.com/subject/bfmfqxtx.html