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


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 
 
结果


作者:叶知行
链接:https://www.jianshu.com/p/e910dfdc9a96
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM