ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享]使用VBA代码选择单元格/区域

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2007-2-11 16:46 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:Range对象

使用VBA代码选择单元格/区域

分类:ExcelVBA>>ExcelVBA对象模型编程>>常用对象>>Range对象

使用VBA的常见任务是指定单元格或单元格区域,然后对该单元格或单元格区域进行一些操作,如输入公式或更改格式。通常用一条语句就能完成操作,该语句可标识单元格,还可更改某个属性或应用某个方法。本文是《在VBA代码中引用Excel工作表中单元格区域的方式小结》一文的补充,参考了msdn文档库和Excel 2007 VBA帮助系统。供分享。

评分

2

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
目录
如何选择当前工作表中的单元格?
如何选择同一工作簿中其它工作表上的单元格?
如何选择不同工作簿中的单元格?
如何选择当前工作表中的单元格区域?
如何选择同一工作簿中另一工作表上的单元格区域?
如何选择不同工作簿中工作表上的单元格区域?
如何在当前工作表中选择命名区域?
如何选择同一工作簿中另一工作表上的命名区域?
如何选择不同工作簿中工作表上的命名区域?
如何选择与当前单元格相关的单元格?
如何选择与另一单元格(不是当前单元格)相关的单元格?
如何选择偏离指定区域的一个单元格区域?
如何选择一个指定的区域并扩展区域的大小?
如何选择一个指定的区域,再偏离,然后扩展区域的大小?
如何选择两个或多个指定区域?
如何选择两个或多个指定区域的交叉区域?
如何选择连续数据列中的最后一个单元格?
如何选择连续数据列底部的空单元格?
如何选择某列中连续数据单元格区域?
如何选择某列中非连续数据单元格区域?
如何选择一个矩形(规则的)单元格区域?
如何选择多个不同长度的非连续列?
引用工作表上的所有单元格
使用 A1 表示法引用单元格和区域
引用行和列
使用索引号引用单元格
使用快捷表示法引用单元格
使用 Range 对象引用单元格
引用命名区域
引用多个区域
处理三维区域

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:48 | 显示全部楼层
如何选择当前工作表中的单元格?
例如,可以使用下面的代码选择当前工作表中的单元格D5:
ActiveSheet.Cells(5, 4).Select
或:ActiveSheet.Range("D5").Select

如何选择同一工作簿中其它工作表上的单元格?

例如,要选择同一工作簿中另一工作表上的单元格E6,可以使用下面的代码:
Application.Goto ActiveWorkbook.Sheets("Sheet2").Cells(6, 5)
或:Application.Goto (ActiveWorkbook.Sheets("Sheet2").Range("E6"))
也可以先激活该工作表,然后再选择:
Sheets("Sheet2").Activate
ActiveSheet.Cells(6, 5).Select

如何选择不同工作簿中的单元格?
例如,要选择另一工作簿中的一个工作表上的单元格F7,可以使用下面的代码:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Cells(7, 6)
或:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("F7")
也可以先激活该工作簿中的工作表,然后再选择:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Cells(7, 6).Select

如何选择当前工作表中的单元格区域?
例如,要选择当前工作表中的单元格区域C2:D10,可以使用下面的代码:
ActiveSheet.Range(Cells(2, 3), Cells(10, 4)).Select
或:ActiveSheet.Range("C2:D10").Select
或:ActiveSheet.Range("C2", "D10").Select

如何选择同一工作簿中另一工作表上的单元格区域?
例如,要选择同一工作簿中另一工作表上的单元格区域D3:E11,可以使用下面的代码:
Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3:E11")
或:Application.Goto ActiveWorkbook.Sheets("Sheet3").Range("D3", "E11")
也可以先激活该工作表,然后再选择:
Sheets("Sheet3").Activate
ActiveSheet.Range(Cells(3, 4), Cells(11, 5)).Select

如何选择不同工作簿中工作表上的单元格区域?
例如,要选择另一工作簿中某工作表上的单元格区域E4:F12,可以使用下面的代码:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4:F12")
或:Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet1").Range("E4", "F12")
也可以先激活该工作表,然后再选择:
Workbooks("BOOK2.XLS").Sheets("Sheet1").Activate
ActiveSheet.Range(Cells(4, 5), Cells(12, 6)).Select

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:49 | 显示全部楼层
如何在当前工作表中选择命名区域?
例如,要选择当前工作表中名为“Test”的区域,可以使用下面的代码:
Range("Test").Select
或:Application.Goto "Test"

如何选择同一工作簿中另一工作表上的命名区域?
例如,选择同一工作簿中另一工作表上名为“Test”的区域,可使用下面的代码:
Application.Goto Sheets("Sheet1").Range("Test")
也可以先激活工作表,再选择:
Sheets("Sheet1").Activate
Range("Test").Select

如何选择不同工作簿中工作表上的命名区域?
例如,要选择不同工作簿中工作表上名为“Test”的区域,可使用下面的代码:
Application.Goto Workbooks("BOOK2.XLS").Sheets("Sheet2").Range("Test")
也可以先激活工作表,再选择:
Workbooks("BOOK2.XLS").Sheets("Sheet2").Activate
Range("Test").Select

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:51 | 显示全部楼层
如何选择与当前单元格相关的单元格?
例如,要选择距当前单元格下面5行左侧4列的单元格,可以使用下面的代码:
ActiveCell.Offset(5, -4).Select
要选择距当前单元格上方2行右侧3列的单元格,可以使用下面的代码:
ActiveCell.Offset(-2, 3).Select
注意:一定要保证当前单元格与所选单元格之间的距离在工作表范围内,否则会出错。

如何选择与另一单元格(不是当前单元格)相关的单元格?
例如,要选择距单元格C7下方5行右侧4列的单元格,可以使用下面的代码:
ActiveSheet.Cells(7, 3).Offset(5, 4).Select
或:ActiveSheet.Range("C7").Offset(5, 4).Select

如何选择偏离指定区域的一个单元格区域?
例如,要选择与名为“Test”的区域大小相同但在该区域下方4行右侧3列的一个区域,可以使用下面的代码:
ActiveSheet.Range("Test").Offset(4, 3).Select
如果该命名区域不在当前工作表中,可以先激活该工作表,然后再选择,如下面的代码:
Sheets("Sheet3").Activate
ActiveSheet.Range("Test").Offset(4, 3).Select

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如何选择一个指定的区域并扩展区域的大小?
例如,要选择当前工作表中名为“Database”区域,然后将该区域向下扩展5行,可以使用下面的代码:
Range("Database").Select
Selection.Resize(Selection.Rows.Count + 5, Selection.Columns.Count).Select

如何选择一个指定的区域,再偏离,然后扩展区域的大小?
例如,选择名为“Database”区域下方4行右侧3列的一个区域,然后扩展2行和1列,可以使用下面的代码:
Range("Database").Select
Selection.Offset(4, 3).Resize(Selection.Rows.Count + 2, Selection.Columns.Count + 1).Select

如何选择两个或多个指定区域?
例如,为了同时选择名为“Test”和“Sample”的两个区域,可以使用下面的代码:
Application.Union(Range("Test"), Range("Sample")).Select
注意,这两个区域须在同一工作表中,如下面的代码:
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet1!C3:D4"))
但Union方法不能处理不同工作表中的区域,可下面的代码:
Set y = Application.Union(Range("Sheet1!A1:B2"), Range("Sheet2!C3:D4"))
将会出错。

如何选择两个或多个指定区域的交叉区域?
例如,要选择名为“Test”和“Sample”的两个区域的交叉区域,可以使用下面的代码:
Application.Intersect(Range("Test"), Range("Sample")).Select
注意,两个区域必须在同一工作表中。

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:54 | 显示全部楼层
下面的示例使用了如下图所示的工作表。
 

如何选择连续数据列中的最后一个单元格?
例如,要选择一个连续列中的最后一个单元格,可以使用下面的代码:
ActiveSheet.Range("a1").End(xlDown).Select
该代码使用在上面的工作表中,单元格A4被选择。

如何选择连续数据列底部的空单元格?
例如,要选择连续单元格区域下面的单元格,可以使用下面的代码:
ActiveSheet.Range("a1").End(xlDown).Offset(1, 0).Select
该代码使用在上面的工作表中,单元格A5被选择。

如何选择某列中连续数据单元格区域?
例如,要选择一列中的连续数据单元格区域,可以使用下面的代码:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown)).Select
或:ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).Address).Select
该代码使用在上面的工作表中,单元格区域A1:A4将被选择。

如何选择某列中非连续数据单元格区域?
例如,要选择某列中非连续数据单元格区域,可以使用下面的代码:
ActiveSheet.Range("a1", ActiveSheet.Range("a65536").End(xlUp)).Select
或:ActiveSheet.Range("a1:" & ActiveSheet.Range("a65536").End(xlUp).Address).Select
该代码使用在上面的工作表中,单元格区域A1:A6将被选择。

如何选择一个矩形(规则的)单元格区域?
要选择围绕某单元格的一个矩形区域,可以使用CurrentRegion方法。CurrentRegion方法将选择四周被空行和空列围绕的区域,如下面的代码:
ActiveSheet.Range("a1").CurrentRegion.Select
该代码使用在上面的工作表中,将选择单元格区域A1:C4。也可以使用下面的代码:
ActiveSheet.Range("a1", ActiveSheet.Range("a1").End(xlDown).End(xlToRight)).Select
或:
ActiveSheet.Range("a1:" & ActiveSheet.Range("a1").End(xlDown).End(xlToRight).Address).Select
若想选择单元格区域A1:C6,可使用下面的代码:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1", ActiveSheet.Cells(lastRow, lastCol)).Select
或:
lastCol = ActiveSheet.Range("a1").End(xlToRight).Column
lastRow = ActiveSheet.Cells(65536, lastCol).End(xlUp).Row
ActiveSheet.Range("a1:" & ActiveSheet.Cells(lastRow, lastCol).Address).Select

[分享]使用VBA代码选择单元格/区域

[分享]使用VBA代码选择单元格/区域

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
如何选择多个不同长度的非连续列?
例如,有下图所示的工作表:
 
要同时选择A列和C列中的数据,即单元格区域A1:A3和C1:C6,可使用下面的代码:
StartRange = "A1"
EndRange = "C1"
Set a = Range(StartRange, Range(StartRange).End(xlDown))
Set b = Range(EndRange, Range(EndRange).End(xlDown))
Union(a, b).Select

[分享]使用VBA代码选择单元格/区域

[分享]使用VBA代码选择单元格/区域

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:55 | 显示全部楼层
注:使用Application.Goto方法,如果指定另一工作表(不是当前工作表)中的指定区域,在Range属性中使用两个Cells属性时,则必须包括Sheets对象,如:
Application.Goto Sheets("Sheet1").Range(Sheets("Sheet1").Range(Sheets("Sheet1").Cells(2, 3), Sheets("Sheet1").Cells(4, 5)))

TA的精华主题

TA的得分主题

 楼主| 发表于 2007-2-11 16:56 | 显示全部楼层
在VBA中,Range 对象既可表示单个单元格,也可表示单元格区域。下面的内容说明了标识和处理Range对象最常用的方法。

引用工作表上的所有单元格

如果对工作表应用 Cells 属性时不指定索引号,该方法将返回代表工作表上所有单元格的 Range 对象。以下 Sub 过程清除活动工作簿中 Sheet1 上的所有单元格的内容。
Sub ClearSheet()
    Worksheets("Sheet1").Cells.ClearContents
End Sub

使用 A1 表示法引用单元格和区域
可使用 Range 属性引用 A1 引用样式中的单元格或单元格区域。下述子例程将单元格区域 A1:D5 的字体设置为加粗。
Sub FormatRange()
    Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _
        .Font.Bold = True
End Sub
下表演示了使用 Range 属性的一些 A1 样式引用。
引用                          含义
Range("A1")             单元格 A1
Range("A1:B5")       从单元格 A1 到单元格 B5 的区域
Range("C5:D9,G9:H16")     多块选定区域
Range("A:A")        A 列
Range("1:1")        第一行
Range("A:C")        从 A 列到 C 列的区域
Range("1:5")        从第一行到第五行的区域
Range("1:1,3:3,8:8")     第 1、3 和 8 行
Range("A:A,C:C,F:F")     A 、C 和 F 列
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-28 22:20 , Processed in 0.049252 second(s), 9 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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