分享

关于UsedRange属性,你想要的都在这里

 VBA说 2020-04-07

UsedRange属性是我们在VBA编程中经常用到的一个极为重要的属性,下面介绍UsedRange属性。

  如果您想知道当前工作表中所有已使用的单元格区域的大小,或者您想引用当前工作表中已使用的区域,那么您可能就要想到UsedRange属性了。

UsedRange属性应用于Worksheet对象,返回指定工作表中已使用区域的Range对象,即返回工作表中已使用的单元格区域。因此,该属性也可以用于选取单元格区域。

下面用一个简单的例子来说明UsedRange属性的功能。

如下图1所示的工作表:

图1:一个带有数据的工作表

然后,在VBE编辑器中输入如下代码:

Sub Sample01()

 Worksheets("Sheet1").UsedRange.Select

End Sub

代码运行后,上面的工作表显示如下图2所示:

图2:代码运行后的工作表

即在指定工作表中(本例为工作表Sheet1)已使用范围被全部选中。可以看出,UsedRange属性返回工作表中所有已使用范围的单元格区域,而不管该区域数据间是否有空行或空格。

特别注意:UsedRange属性返回工作表中所有已使用范围的单元格区域是指:单元格中有数值、公式、单元格格式化设置(例如:单元格字体设置、边框设置等等)

因为属性usedrange包含着带格式的、空白的单元格,所以只要有这样的单元格,就会被统计上,因此,手动清除数据后(清除文字、背景色、合并单元格),还会有多出的行,只有彻底删除之后才会正确统计。彻底清除语句:cells.clear。

UsedRange属性的一些常见用法:

妙用UsedRange对象可以获得工作表的很多信息: 

(1)已用单元格区域的第一行行序数:UsedRange.Row

(2)已用单元格区域的占用的行数:UsedRange.Rows.Count 

(3)已用单元格区域的最后一行的列序数: UsedRange .Row+ UsedRange. Rows.Count-1 (重要)

(4)已用单元格区域的第一列列序数:UsedRange.Column 

(5)已用单元格区域的占用的列数:UsedRange.Columns.Count  已用单元格区域的最后一列的列序数:UsedRange.Column+UsedRange.Columns.Count-1,UsedRange.Areas.Count>1除外(Areas(index)也返回的是Range对象) 

(6)已用单元格区域的占用的总单元格数:UsedRange.Cells.Count或 Me.UsedRange.Count,返回的只是“行数×列数”,所以无论内部有无合并单元格,此值不受影响。 

(7)语句Activesheet.UsedRange.Address返回当前工作表已使用单元格区域的地址


end(xlup).row与usedrange.row的探讨

说到这里,上面第三条已用单元格区域的最后一行的列序数: UsedRange .Row+ UsedRange. Rows.Count-1 ,我们平时时获取已用单元格区域的最后一行的列序数一般都是用range("").end(xlup).row。

那么这两种方法的区别是什么呢?

对于上图

Sub s()

ss = Sheet1.UsedRange.Row + Sheet1.UsedRange.Rows.Count - 1

End Sub

Sub t()

tt= Sheet1.Range("a65536").End(xlUp).Row

End Sub

两段代码得到的最后一行的行数是一样的。

但是,如果是下图的情况,两者就有区别。

ss =9,而 tt=4。

总结:对于确定某一列一定有该Sheet已用单元格区域的最后一行的话,用end(xlup).row UsedRange .Row+ UsedRange. Rows.Count-1都可以,但是如果Sheet中不确定是那一列有该Sheet已用单元格区域的最后一行,这个时候就只能用“ UsedRange .Row+ UsedRange. Rows.Count-1 ”获取已用单元格区域的最后一行的列序数。

这段话有点拗口,希望反复斟酌理解。很有用处。

END

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多