美文网首页
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