VBA专题11:详解UsedRange属性

excelperfect

UsedRange属性是Worksheet对象的一个有用的属性,可以返回工作表中已使用的单元格区域。实际上,根据UsedRange的意思,我们就可以明白,该属性代表工作表中已使用的区域,不仅包括可以看到内容的单元格,而且不包括应用了格式、添加批注或其他一些修改的单元格。我们可以使用UsedRange属性来操控Excel工作表数据。

由于UsedRange属性返回一个Range对象,因此Range对象可用的所有属性和方法也可用于UsedRange,这包括列/行计数、选择、清除、格式化和区域导航。此外,可以将其设置为命名对象以方便引用,如下所示:

Dim rng As Range

Set rng =Worksheets('MySheet').UsedRange

其中,“MySheet”是想要操作的工作表的名称。

设置命名对象(例如rng)后,在输入代码时就可以利用VBA的智能提示工具了。

使用UsedRange属性,可以方便地找到工作表中已使用的第一行、第一列、最后一行和最后一列,统计已使用区域的行列数以用于循环处理,等等。

应用1:选择工作表中已使用的区域

下面的代码选择当前工作表中已使用的区域:

Sub SelectUsedRange()

ActiveSheet.UsedRange.Select

End Sub

运行代码后的效果如下图1所示。

图1

从上图1中可以看到,VBA尝试使用电子表格上的数据来计算第一个单元格和最后一个单元格,并选择该区域范围内的所有内容。注意,在图1中,使用UsedRange属性时,还包括已使用区域范围内的任何空单元格。

正如刚刚所演示的那样,UsedRange属性总是产生一个矩形区域,从最左上角单元格开始,直到最下面的行和最右边的列。即使它们定义了UsedRange属性返回的区域的边界,左上角和右下角单元格也可能实际上不包含任何值。

例如下图2所示,UsedRange属性返回单元格区域C1:F25,即便该区域四个角上的单元格中都没有数据或格式化,以及数据中间还有一个空行。

图2

应用2:获取工作表已使用单元格区域地址

下面的代码在立即窗口中打印工作表已使用区域的地址:

Dim rng As Range

Set rng =Worksheets('MySheet').UsedRange

Debug.Print rng.Address

对于上图2所示的工作表,返回字符串$C$1:$F$25,该区域的第一行(是工作表第1行),第一列(是工作表列C),最后一行(是工作表第25行),最后一列(是工作表列F)。

应用3:找到工作表已使用区域的第一行和第一列

使用UsedRange属性,结合Range对象的Row属性和Column属性,很容易找到工作表已使用区域的第一行和第一列:

Dim rng As Range

Set rng =Worksheets('MySheet').UsedRange

Debug.Print rng.Row

Debug.Print rng.Column

对于上图2所示的工作表,返回代表工作表已使用区域第一行和第一列的数字,即1和3,对应于单元格$C$1。

应用3:统计行数和列数

可以使用Count属性来统计工作表已使用区域的行数和列数:

Dim rng As Range

Set rng =Worksheets('MySheet').UsedRange

Debug.Print rng.Rows.Count

Debug.Print rng.Columns.Count

对于上图2所示的工作表,返回25行4列。

应用4:找到工作表已使用区域的最后一行和最后一列

使用下面的代码,获取工作表已使用区域的最后一行和最后一列:

Dim rng As Range

Dim firstRow As Long, lastRow As Long

Dim firstCol As Long, lastCol As Long

Dim numRows As Long, numCols As Long

Set rng =Worksheets('MySheet').UsedRange

firstRow =rng.Row

firstCol =rng.Column

numRows =rng.Rows.Count

numCols =rng.Columns.Count

lastRow =firstRow + numRows - 1

lastCol =firstCol + numCols - 1

注意,在计算最后一行和最后一列时,要减去1,以避免重复计算第一行和第一列。

其实还有更简单的方式,如下:

Dim rng As Range

Dim lastRow As Long, lastCol As Long

Set rng =Worksheets('MySheet').UsedRange

lastRow =rng.Rows(rng.Rows.Count).Row

lastCol =rng.Columns(rng.Columns.Count).Column

应用5:查找工作表最后一个单元格

找到工作表已使用区域最后一行和最后一列后,就可以知道其最后一个单元格了。接上:

Cells(lastRow,lastCol)

即为工作表最后一个单元格。

应用6:用于循环计数

假设工作表中仅在列A中包含数字数据,可以使用下面的程序将总数存储在列B(第2列)中:

Sub EnterTotal()

Dim firstRow As Long

Dim lastRow As Long

Dim lRow As Long

Dim rng As Range

Set rng = ActiveSheet.UsedRange

firstRow = rng.Row

lastRow = rng.Rows(rng.Rows.Count).Row

For lRow = firstRow To lastRow

If lRow = firstRow Then

Cells(lRow, 2) = Cells(lRow, 1)

Else

Cells(lRow, 2) = Cells(lRow, 1) +Cells(lRow - 1, 2)

End If

Next lRow

End Sub

需要两个嵌套循环才能遍历已使用区域内的行和列:

Sub LoopThroughUsedRange()

Dim firstRow As Long, lastRow As Long

Dim firstCol As Long, lastCol As Long

Dim lRow As Long, lCol As Long

Dimrng As Range

Set rng = ActiveSheet.UsedRange

firstRow = rng.Row

firstCol = rng.Column

lastRow = rng.Rows(rng.Rows.Count).Row

lastCol =rng.Columns(rng.Columns.Count).Column

For lCol = firstCol To lastCol

For lRow = firstRow To lastRow

Debug.Print Cells(lRow,lCol).Address & ' = ' & Cells(lRow, lCol)

Next lRow

Next lCol

End Sub

技巧:如果想排除已使用区域中的空单元格,可以结合使用IsEmpty函数。

一旦理解了如何导航UsedRange,使用VBA应用相关属性就会轻而易举:可以一次执行诸如将整个区域更改为粗体之类的操作。注意,这样的操作对区域中的空单元格也有效。

应用7:设置单元格字体

下面的代码将工作表已使用区域内容加粗:

Dim rng As Range

Set rng =Worksheets('MySheet').UsedRange

rng.Font.Bold= True

下面的代码将工作表已使用区域中的第3列加粗:

Dim rng As Range

Set rng =Worksheets('MySheet').UsedRange

rng.Columns(3).Font.Bold= True

这样的代码更健壮,不会因为在已使用区域外插入/删除行而变化,也不因将该区域移动而变化。

也可以稍作修改,对单元格区域设置填充颜色、数字格式等操作。

应用8:清除单元格内容

下面的代码将清除工作表中已使用区域内容:

Dim rng AsRange

Set rng =Worksheets('MySheet').UsedRange

rng.Clear

最后再提示一点,如果在数据区域外,还有没有输入数据但应用了格式的单元格,此时的工作表已使用区域将扩大至该单元格所在的行列范围,此时需要一些额外的处理。

(0)

相关推荐

  • Excel VBA 7.20 Excel跨工作薄多工作表数据合并之Excel表格多行/单行表头共存

    一起学习,一起进步~~ 发现小伙伴们的数据结果真的好复杂,复杂到我都想要哭了,这不昨天才分享过有多行表头的数据如何汇总合并,今天就有小伙伴反馈,他的数据虽然是有多行表头的,但是又有一些数据没有多行表头 ...

  • 解决方案|标签导出电缆图表为Excel后的处理

    EPLAN中的"标签"功能,位于"工具→制造数据→导出/标签"下,它用于将EPLAN项目中的数据导出,转换为TXT.XML.HTML.Excel等格式,供第三方 ...

  • Excel VBA 7.19 Excel跨工作薄多工作表数据合并之Excel表格多行表头

    一起学习,一起进步~~ 多行表头,表头中含有合并单元格,这种类型的Excel表格在我们的日常工作中是经常出现的,很多的人在做表格的时候,想要体现表格的整齐和美观,大批量的使用了合并单元格.多行表头的形 ...

  • 【原创教程】promote详解和属性转化_houdini之道02_01_03CG猎人原创完全入门教程发布

    --  微资讯 · 微课程  -- 利用零碎时间,走上超神之路! 教程介绍 教程名字   CGhunter_houdini之道_02_01_03_attributepromote 教程导读 详细介绍了 ...

  • 【阅读理解】小说阅读考点专题 例题详解

    小说阅读 1 ★知识划重点★ 一.环境 小说中的自然环境描写与散文中的自然环境描写在景物特点及技巧等方面绝大部分是相同的.如果有区别的话,区别在于小说中自然环境描写的作用更尊重小说的文本特征,更贴切小 ...

  • 热点预测11 | 建筑专题——押题预测及答题模板【详解】

    历史园地 中学历史教学第一公号 220篇原创内容 公众号 热点预测01 | 社会基层治理--押题预测及答题模板[详解] 热点预测02 | 生态文明 环境保护--押题预测及答题模板[详解] 热点预测03 ...

  • VBA专题12:详解GetAttr函数

    excelperfect 有时候,你可能会发现了解正在与之交互的文件或文件路径的基本文件属性很有用.如果你读取文件内容后再将内容写回文件,那么知道原始文件是否为只读是重要的,在这种情况下,你的写入将失 ...

  • 高考物理11类重点题型全解析! 附经典例题&详解

    高考理科综合卷中,物理部分选择题有单项和双项选择题两种题型.从最近几年的试题看: 4道单项选择难度低,考查的考点相对稳定且相对单一,涉及的知识点主要有共点力平衡.热力学第一定律.气体状态方程.分子动理 ...

  • 11种常见皮肤病用药方案及12种外用药详解

    来源:无忧开药店 11种常见皮肤病用药方案. 1.接触性皮炎 (一)发病前均有过敏物质或刺激物接触史,一般发病急,皮损发生在接触部位. (二)皮损的轻重与致敏物或刺激物质的强弱.作用时间的长短.接触面 ...

  • 2021年5月11号十二生肖运势详解

    2021年5月11日,星期二,农历三月三十 (辛丑年癸巳月己未日),法定工作日. 特吉生肖:马.兔.猪 次吉生肖:猴.鸡.羊 今日带衰:狗.鼠.牛 喜神方位:东北方 财神方位:正北方 宜:解除.祭祀 ...

  • 分析图专题丨场地分析详解

    继续上一篇的场地分析(分析图专题丨前期分析攻略!),前文我们从理论方面讲解了场地分析所包含的内容及其与设计的关系,本期我们来讲一些相应的软件技巧,绘制一张比较常用的场地分析. 本期教程偏基础,我们会从 ...

  • 分析图专题丨成果校验详解

    Hello小伙伴们,又到了每周一的制图教室时间啦,今天为大家带来的是分析图系列的第六讲:成果校验篇的实际演练~ 回顾一下我们在上一篇中讲过的内容,我们将成果校验的分析内容分为了三部分:功能分区与排布. ...