ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 35321|回复: 46

[原创]解析UsedRange属性

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-9-12 19:53 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:Range对象
解析UsedRange属性
分类:ExcelVBA>>ExcelVBA对象模型编程>>常用对象>>Worksheet对象
如果您想知道当前工作表中所有已使用的单元格区域的大小,或者您想引用当前工作表中已使用的区域,那么您可能就要想到UsedRange属性了。
UsedRange属性应用于Worksheet对象,返回指定工作表中已使用区域的Range对象,即返回工作表中已使用的单元格区域。因此,该属性也可以用于选取单元格区域。
下面用一个简单的例子来说明UsedRange属性的功能。如下图1所示的工作表:

图1:一个带有数据的工作表
然后,在VBE编辑器中输入如下代码:
Sub Sample01()
  Worksheets("Sheet1").UsedRange.Select
End Sub
代码运行后,上面的工作表显示如下图2所示:

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

[原创]解析UsedRange属性

[原创]解析UsedRange属性

[原创]解析UsedRange属性

[原创]解析UsedRange属性

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-12 19:54 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
UsedRange属性的一些常见用法
(1) 返回工作表中已使用区域的行数或列数
语句Activesheet.UsedRange.Rows.count返回当前工作表中已使用单元格区域的行数。同样,语句Activesheet.UsedRange.Columns.count返回当前工作表中已使用单元格区域的列数。在上例中,您可以在调试窗口中输入下面语句,将返回相应的值。
?Activesheet.UsedRange.Rows.count
 20
?Activesheet.UsedRange.Columns.count
 4
一般写法为<在此输入引用对象>.UsedRange.Rows.Count<在此输入引用对象>.UsedRange.Columns.Count
(2) 返回工作表中已使用单元格区域的地址
语句Activesheet.UsedRange.Address 返回当前工作表已使用单元格区域的地址。在上例中,您可以在调试窗口中输入下面语句,将返回已使用单元格区域地址为$A$1:$D$20。
?Activesheet.UsedRange.Address
$A$1:$D$20
一般写法为<在此输入引用对象>.UsedRange.Address
(3) 设置工作表中已使用单元格区域对象,并进行引用或操作。如下代码所示:
Dim cellRange As Range,RowNum As Long,ColNum As Long
Set cellRange=Worksheets(“Sheet1”).UsedRange ‘设置已用单元格区域并赋值给变量
RowNum=cellRange.Rows.Count ‘已用单元格区域的行数
ColNum=cellRange.Columns.Count ‘已用单元格区域的列数
[此贴子已经被作者于2006-9-12 20:04:28编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-12 19:55 | 显示全部楼层
UsedRange属性示例
现在,我们举几个例子,进一步说明UsedRange属性的用法。
[示例一]下面的程序在活动工作表已使用单元格区域中,当该区域不包含任何公式时,清除该区域不能打印的字符。其中,ActiveSheet.UsedRange 代表当前工作表中已使用单元格区域组成的Range对象。(By Chip Pearson)
Sub CleanUp()
  Dim TheCell As Range
  For Each TheCell In ActiveSheet.UsedRange
    With TheCell
      If .HasFormula = False Then
        .Value = Application.WorksheetFunction.Clean(.Value)
      End If
    End With
  Next TheCell
End Sub
[此贴子已经被作者于2006-9-12 20:05:32编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-12 19:56 | 显示全部楼层
[示例二]下面的程序将当前工作表中已用单元格区域或所选单元格中第一个字符删除,其中,ActiveSheet.UsedRange.Address代表当前工作表中已用单元格区域的地址。
Public Sub Delete_First_Character(Optional ByRef objRange As Range = Nothing)
  Dim objCell As Range
  On Error Resume Next
  If (objRange Is Nothing) Then
     Set objRange = Application.InputBox(Prompt:="请选择单元格区域", _
        Title:="删除第一个字符", _
        Type:=8, _
        Default:=ActiveSheet.UsedRange.Address) '设置缺省选区为已用区域
  End If
  Err.Clear
  Set objRange = objRange.SpecialCells(xlCellTypeConstants)
  If (Err.Number <> 0&) Or (objRange Is Nothing) Then
    MsgBox "在指定的单元格区域中没有符合要求的单元格.", _
    vbExclamation Or vbOKOnly, _
    ActiveWorkbook.Name
    Exit Sub
  End If
  On Error GoTo Exit_Delete_First_Character
  Application.ScreenUpdating = False
  For Each objCell In objRange
    objCell = Mid$(objCell, 2)
  Next objCell
Exit_Delete_First_Character:
  On Error Resume Next
  Application.ScreenUpdating = True
End Sub

[此贴子已经被作者于2006-9-12 20:06:58编辑过]

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-12 19:57 | 显示全部楼层
[示例三] 在本示例中,当您在工作表的E列中的单元格中输入“finish”后,点击右侧按钮,将会对此行用指定的背景色进行标识,如图3和图4。

图3:在E8单元格中输入“finish”
 
图4:点击按钮后的效果
当您删除单元格E6中的数据,如下图5所示。
 
图5:删除单元格E6中的数据
 
图6:点击按钮后的效果
本示例中按钮所附加的代码如下,其中,UsedRange.Rows.Count表示当前工作表中已使用区域的行数。
Private Sub CommandButton1_Click()
  Dim r As Long
  For r = UsedRange.Rows.Count To 1 Step -1
    If Range("E" & r) = "finish" Then _
      Range("A:G").Rows(r).Interior.ColorIndex = 10
    Next r
  For r = UsedRange.Rows.Count To 1 Step -1
    If Range("E" & r) = "" Then _
      Range("A:G").Rows(r).Interior.ColorIndex = 2
  Next r
End Sub

[提示]您可以将此代码放置在工作表变化事件中,这样,当工作表变化时,符合条件的相应行会自动标记背景色。
[此贴子已经被作者于2006-9-12 20:09:33编辑过]
0x9kT1LZ.jpg
p12iJKSy.jpg
DGhbHnmP.jpg
Es7m1fWQ.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-9-12 19:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

[示例四] 本示例演示了删除行操作,即在活动工作表已使用单元格区域中,若某单元格中包含有“AND”(如为ANDXXX或XXXANDXX或XXXAND等,不区分大小写),则删除该单元格所在行。ActiveSheet.UsedRange.Find(what)表示在当前工作表所有已使用单元格区域中查找含有变量what中的内容的单元格,程序代码如下:(by Patrick Molloy)
Sub Find_AND()
  Dim rng As Range
  Dim what As String
  what = "AND"
  Do
    Set rng = ActiveSheet.UsedRange.Find(what)
    If rng Is Nothing Then
      Exit Do
    Else
       Rows(rng.Row).Delete
    End If
  Loop
End Sub
[提示]您可以更改程序中所查找的字符,从而实现您所想要的目的。


示例文档见 UsedRange属性示例.xls。

laghduAg.rar (15.48 KB, 下载次数: 476)

By fanjy in 2006-09-01

[此贴子已经被作者于2006-9-12 20:11:18编辑过]

TA的精华主题

TA的得分主题

发表于 2006-9-12 20:07 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-9-12 20:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不错,学习

TA的精华主题

TA的得分主题

发表于 2006-9-12 20:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-9-13 02:51 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 02:56 , Processed in 0.062213 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表