ExcelVBA教程:Range集合
多个对象
Range
多个对象
代表某⼀单元格、某⼀⾏、某⼀列、某⼀选定区域(该区域可包含⼀个或若⼲连续单元格区域),或者某⼀三维区域。
Range集合⽤法
本部分将说明下列返回 Range对象的属性和⽅法:
Range属性
Cells属性
Range 和 Cells
Offset属性
Union⽅法
Range属性
可⽤ Range(arg)(其中 arg 为区域名称)来返回代表单个单元格或单元格区域的 Range对象。下例将单元格 A1 中的值赋给单元格 A5。
Worksheets("Sheet1").Range("A5").Value = _
Worksheets("Sheet1").Range("A1").Value
下例设置单元格区域 A1:H8 中每个单元格的公式,⽤随机数填充该区域。在没有对象识别符(句号左边的对象)的情况下,使⽤ Range属性将返回活动表上的⼀个区域。如果活动表不是⼯作表,则该⽅法⽆效。在没有明确的对象识别符的情况下,使⽤ Range属性之前,可
⽤Activate⽅法来激活⼯作表。
Worksheets("Sheet1").Activate
Range("A1:H8").Formula = "=Rand()" 'Range is on the active sheet
下例清除区域 Criteria 中的内容。
Worksheets(1).Range("Criteria").ClearContents
如果⽤⽂本参数指定区域地址,必须以 A1 样式记号指定该地址(不能⽤ R1C1 样式记号)。
Cells属性
可⽤ Cells(row, column)(其中 row 为⾏号,column 为列标)返回单个单元格。下例将单元格A1 赋值为 24。
Worksheets(1).Cells(1, 1).Value = 24
下例设置单元格 A2 的公式。
ActiveSheet.Cells(2, 1).Formula = "=Sum(B1:B5)"
虽然也可⽤Range("A1")返回单元格 A1,但有时⽤ Cells属性更为⽅便,因为对⾏或列使⽤变量。下例在 Sheet1 上创建⾏号和列标。注意,当⼯作表激活以后,使⽤ Cells属性时不必明确声明⼯作表(它将返回活动⼯作表上的单元格)。
Sub SetUpTable()
Worksheets("Sheet1").Activate
For TheYear = 1 To 5
Cells(1, TheYear + 1).Value = 1990 + TheYear
Next TheYear
For TheQuarter = 1 To 4
Cells(TheQuarter + 1, 1).Value = "Q" & TheQuarter
Next TheQuarter
End Sub
虽然可⽤ Visual Basic 字符串函数转换 A1 样式引⽤,但使⽤Cells(1, 1)记号更为简便(⽽且也是更好的编程习惯)。
可⽤ expression.Cells(row, column) 返回区域中的⼀部分,其中 expression 是返回 Range对象的表达式,row 和 column 为相对于该区域左上⾓的偏移量。下例设置单元格 C5 中的公式。
Worksheets(1).Range("C5:C10").Cells(1, 1).Formula = "=Rand()"
Range 和 Cells
可⽤ Range(cell1, cell2) 返回⼀个 Range对象,其中 cell1 和 cell2 为指定起始和终⽌位置的Range对象。下例设置单元格区域 A1:J10 的边框线条的样式。
With Worksheets(1)
vba 字符串函数.Range(.Cells(1, 1), _
.Cells(10, 10)).Borders.LineStyle = xlThick
End With
注意每个 Cells属性之前的句点。如果前导的 With 语句应⽤于该 Cells属性,那么这些句点就是必需的。本⽰例中,句点指⽰单元格处于第⼀张⼯作表上。如果没有句点,Cells属性将返回活动⼯作表上的单元格。
Offset属性
可⽤ Offset(row, column)(其中 row 和 column 为⾏偏移量和列偏移量)返回相对于另⼀区域在指定偏移量处的区域。下例选定位于当前选定区域左上⾓单元格的向下三⾏且向右⼀列处的单元格。由于必须选定位于活动⼯作表上的单元格,因此必须先激活⼯作表。
Worksheets("Sheet1").Activate
'Can't select unless the sheet is active
Selection.Offset(3, 1).Range("A1").Select
Union⽅法
可⽤ Union(range1, range2, ...) 返回多块区域,即该区域由两个或多个连续的单元格区域所组成。下例创建由单元格区域 A1:B2 和 C3:D4 组合定义的对象,然后选定该定义区域。
Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set r1 = Range("A1:B2")
Set r2 = Range("C3:D4")
Set myMultiAreaRange = Union(r1, r2)
myMultiAreaRange.Select
使⽤包含若⼲块的选定区域时,Areas属性很有⽤。它将⼀个多块选定区域分割为单个的 Range 对象,然后将这些对象作为⼀个集合返回。使⽤返回的集合的Count属性可检测⼀个选定区域是否包含多块区域,如下例所⽰。
Sub NoMultiAreaSelection()
NumberOfSelectedAreas = Selection.Areas.Count
If NumberOfSelectedAreas > 1 Then
MsgBox "You cannot carry out this command " & _
"on multi-area selections"
End If
End Sub
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论