一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区(可以为连续的单元格,也可以是不连续的单元格)中选定的单元格,或者是多张工作表中的一组单元格。
引用方式
(1):使用Range属性,格式如下:Range(Cell1,Cell2),其中Cell1是必需的,必须为A1样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。也可包括美元符号(即绝对地址,如“$A$1”)。可在区域中任一部分使用局部定义名称,如Range("A2:LastCell"),其中LastCell为已定义的单元格区域名称;参数Cell2是可选的。区域左上角和右下角的单元格。
Sub RngSelect()
ActiveSheet.Range("A2:F4,B1:C5").Select
End Sub
(2):使用Cells属性返回一个Range对象,格式如下:Cells(RowIndex, ColumnIndex), 两个参数都是可选的,RowIndex-->引用区域中行的序号, ColumnIndex-->引用区域中列的序号。如果缺省参数,Cells属性返回引用对象的所有单元格。Cells属性的参数可以使用变量,因此经常应用于在单元格区域中循环。
Sub CellSelect()
Dim iCell As Integer
For iCell = 1 To 30 Step 2
ActiveSheet.Cells(iCell, 1).Value = iCell
Next iCell
End Sub
运行后,当前活动工作表的A1:A30单元格中奇数行填入序号,这个是由循环决定的。
(3)使用offset属性,返回一个基于引用的Range对象的单元格区域,格式如下:expression.Offset(RowOffset, ColumnOffset),参数expression是必需的,其返回值为一个Range对象。RowOffset参数是可选的,分别表示区域偏移的的行数(正值、负值或0)。正值表示向下偏移,负值表示向上偏移,默认值为0。ColumnOffset参数是可选的,分别表示区域偏移的的行数(正值、负值或0)。正值表示向右偏移,负值表示向左偏移,默认值为0。
Sub OffsetSelect()
Sheet1.Range("A1:C3").Offset(2, 3).Select
End Sub
运行后,显示选中单元格偏移向下两行,向右偏移三列。
(4)使用Resize属性调整指定区域的大小,并返回调整大小后的单元格区域,格式:expression.Resize(RowSize, ColumnSize),其中expression是必选参数,返回要调整大小的Range对象。参数RowSize是可选的,新区域中的行数,缺省时表示该区域中的行数不变。参数ColumnSize是可选的,新区域中的列数,缺省时表示该区域中的列数不变。
Sub Resize()
MsgBox "这是原始区域"
Sheet1.Range("A2:C5").Select
MsgBox "调整后的区域"
Sheet1.Range("A2:C5").resize(3, 2).Select
End Sub
运行后,当点击第一个msgbox的确定后,选择的为原始的区域:
然后弹出第二个msgbox确定后,选择的为通过调整后的区域:
(5)使用Union方法,将多个非连续区域连接起来成为一个区域,从而可以实现对多个连续区域的操作。格式:expression.Union(Arg1, Arg2, ...),参数expression是可选参数,返回一个Application对象,参数Arg1、Arg2是必需的,至少要指定两个Range对象。
Sub UnionSelect()
ActiveWorkbook.Union(ActiveSheet.Range("A1;D4"), _
ActiveSheet.Range("E3:H8")).Select
End Sub
(6)快捷记号,将A1引用样式或命名区域名称使用方括号括起来,作为Range属性的快捷方式,这样就不用键入单词“Range”或使用引号。
Sub FastMark()
[A1:A5] = 3
End Sub
这是使用Fastmark过程使用快捷记号为单元格区域赋值。运行后,当前活动工作表的A1:A5单元格赋值为3。
(7)使用UsedRange属性返回指定工作表上已使用单元格组成的区域。
Sub UseSelect()
Sheet1.UsedRange.Select
End Sub
运行后发现, UseSelect过程使用UsedRange属性选择工作表上已使用单元格组成的区域,包括空单元格
(8)使用CurrentRegion属性返回指定工作表上当前的区域。
Sub CurrentSelect()
Sheet1.Range("A4").CurrentRegion.Select
End Sub
运行后,CurrentSelect过程使用CurrentRegion属性选择工作表上A4单元格当前的区域。
(9)Select方法:一般使用Select方法选定单元格或者单元区域,语法如下:expression.Select(Replace)参数expression是必需的,表示一个有效的对象,参数Replace是可选的,要替换的对象。注:使用Select方法选定单元格时,单元格所在的工作表必需为活动工作表,所以要先使用Activate方法使作用对象成为活动工作表,否则Select方法有可能出错。
例子:
Sub RngSelect()
Sheet2.Activate
Sheet2.Range("A6:C4").Select
End Sub
运行结果选中Sheet2工作表中的A6至C4的单元格。
(10)使用Goto方法,使用Goto方法无需使单元格所在的工作表成为活动工作表,Goto方法选定任意工作簿中的任意区域或任意Visual Basic过程,并且如果该工作簿未处于活动状态,就激活该工作簿,语法是:expression.Goto(Reference,Scroll),参数expression是必需的,返回一个Application对象。参数Reference是可选的,Variant类型,指定目标。可以是Range对象、包含R1C1-样式记号的单元格引用的字符串或包含Visual Basic过程名的字符串。如果省略本参数,目标将是最近一次用Goto方法选定的区域。参数Scroll是可选的,Variant类型,如果该值为True,则滚动窗口直至目标区域的左上角单元格出现在窗口的左上角。如果该值为False,则不滚动窗口。默认值为False。
例子:
Sub RngGoto()
Application.Goto Reference:=Sheet1.Range("A1:B10"), scroll:=True
End Sub
运行后,显示A1:B10单元格区域被选定,并滚动工作表以显示该单元格。
(11)使用Range对象的End属性,可以取得单元格对象后便能获得该单元格的相关属性,如单元格地址、行列号、数值等。End属性返回一个Range对象,该对象代表包含源区域的区域尾端的单元格,等同于按按键<End+向上键>、<End+向下键>、<End+向左键>或<End+向右键>,语法如下:expression.End(Direction),参数expression是必需的,一个有效的对象。参数Direction是可选的,所要移动的方向,可以为如图所示的XlDirection 常量之一。
常量 值 描述
xlDown -4121 向下
xlToRight -4161 向右
xlToLeft -4159 向左
xlUp -4162 向上
Range对象的End属性返回的是一个Range对象,因此可以直接使用该对象的属性和方法。
例子:
Sub LastRow()
Dim rng As Range
Set rng = Sheet1.Range("A65536").End(xlUp)
MsgBox "A列中最后一个非空单元格是" & rng.Address(0, 0) _
& ", 行号" & rng.Row & ",数值" & rng.Value
Set rng = Nothing
End Sub
(12)定位单元格 在Excel中使用定位对话框可以选中工作表中特定的单元格区域,而在VBA中则使用SecialCells方法,它返回一个Range对象,该对象代表与指定类型及值相匹配的所有单元格,语法如下:expression.SecialCells(Type,Value),参数expression是必需的,指明一个有效的对象。参数Type是必需的,要包含的单元格,可为表格所列的XlCelltype常量之一。
常量 值 描述
xlCellTypeAllFormatConditions -4172 任意格式单元格
xlCelltypeAllValidation -4177 含有验证条件的单元格
xlCellTypeBlanks 4 空单元格
xlCellTypeComments -4144 含有注释的单元格
xlCellTypeConstants 2 含有常量的单元格
xlCelltypeFormulas -4123 含有公式的单元格
xlCellTypeLastCell 11 使用区域中最后的单元格
xlCellSameFormatConditions -4173