Office中国论坛/Access中国论坛

标题: 【技巧】 Range 和 Cells 的区别与使用示例 [打印本页]

作者: admin    时间: 2015-9-10 09:40
标题: 【技巧】 Range 和 Cells 的区别与使用示例
' 吕布,2012-01-19
Sub RangVsCellsDemo()
    Dim r
   
    ' 1. 先看 Range 和 Cells 的定义
    ' A. Range 的定义为 Class Range,表示 Range 是一个类,可以根据其所带的参数构造一个Range 对象
    ' B. Cells 的定义为 Property Cells As Range,表示 Cells 是一个属性,返回一个 Range 对象,具体应
    ' 用于不同对象时返回对象不同(帮助时说的明白)

    ' 2. Cells主要作用在于他可以简洁的返回一个Range对象,而使用Range的构造方法相对代码比较长
    ' 比如在2003里,单个的Cells就相当于Range("1:65536"),显然,用前者更简洁明了,顺便提一下,Cells后带
    ' 括号的用法应是 Range 对象 Item 属性的用法,因为 Item 属性是 Range 对象的默认属性,Item省略写
    ' 出来罢了
    Range("1:65536")(2, 3).Select       ' 选取C2单元格
    Range("1:65536")(2, "d").Select     ' 选取D2单元格
    Range("1:65536")(256 + 5).Select    ' 选取E2单元格
    Cells(2, 3).Select      ' 选取C2单元格
    Cells(2, "d").Select    ' 选取D2单元格
    Cells(256 + 5).Select   ' 选取E2单元格
   
    ' 3. Cells 为属性,所以,只有定义了该属性的特定对象才能使用,并且返回特定的 Range 对象,总的来讲是返
    ' 回对象的全部单元格,特别注意,这里所讲的全部并不是我们肉眼所看到的,对于有的联合区域,返回的单元格
    ' 与想象的有点差别,比如 Range("A1:C5,B26").Cells.Count 返回值是30,而我们肉眼看到 A1:C5 和 B26
    ' 两片区域的单元格个数只有22个
    Set r = Cells                   ' 应用于 Application 对象,Application 省略
    Set r = Application.Cells       ' 应用于 Application 对象
    Set r = Worksheets(1).Cells     ' 应用于 Worksheet 对象
    Set r = Range("A1:C5,B26").Cells  ' 应用于 Range 对象,这个就我个人而言,找不出很好的应用
   
    ' 4. Range为类类型,可以通过不同的方法构造Range对象
    ' a. 用区域名称, 用 A1 样式引用的宏语言
    Set r = Range("A1:B2")  ' 区域操作符(冒号)
    Set r = Range("A1:C5 B2:D6")    ' 相交区域操作符(空格)
    Set r = Range("A1:C5,B2:D6")    ' 合并区域操作符(逗号)
'    Set r = Range("UserRng")        ' 自定义名称,要先建立自定义名称UserRng
    ' b. 区域左上角和右下角的单元格
    Set r = Range(Range("A1"), Range("IV65536"))

End Sub


上清宫主
理论性的东西了解少,以下仅为个人看法:
cells表示单个单元格,格式有cells(行号,列号)、cells(行号,列标)和cells(序号),这里的行号、列号、列标、序号都是相对而言的。对于相对,可以试行动以下代码看结果:cells(2,4).select、cells(2,"d").select、cells(16388).select(在07及以后版本)都是选择d2单元格;而Range("b3:h10").Cells(2, 4).Select、Range("b3:h10").Cells(2, "d").Select、Range("b3:h10").Cells(11).Select都是选中的是Range("b3:h10")区域的第二行第四列即e4单元格。
由于cells的参数可以为行号列号,这些都是整数,在代码中就非常好控制,这就为循环中使用提供了便利。不足是表示区域则不成了。

range则不同了,它表示起区域来非常方便。它表示单个单元格时为range(列标行号),如range("b4");在表示多个单元格时Range("b3:h10,a9,12:15") 就将b3至h10的区域、a9单元格、第12至15行全部表示出来了,而 Range("b3:h10 D:F")则将b3至h10的区域与d至f列交叉的部份表示出来。与前面雷同的是Range("b3:h10").Range("A1")表示了b3单元格
由于range的参数为列标行号,列标为字母,所以要对不同列循环时表示起来没整数方便,所以在循环中用range表示单元格要稍难些,一般就采用cells的方法了



作者: admin    时间: 2015-9-10 09:43
无聊的疯子写道:

使用"有道"词典,可以查到相关的内容
以下内容是有道词典查找到的

或者还有比有道更好用的词典,但是我从学VBA开始就一直在用之个,感觉还很不错也就一直没换过..

相比VBa中的帮助,这个看起来更为简单详细
Excel中的Range集合
在Excel中,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()"
下例清除区域 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)
  .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
Selection.Offset(3, 1).Range("A1").Select
Union 方法
可用 Union(range1, range2, ...) 返回多块区域,即该区域由两个或多个连续的单元格区域所组成。下例创建由单元格区域 A1:B2 和 C34 组合定义的对象,然后选定该定义区域。
Dim r1 As Range, r2 As Range, myMultiAreaRange As Range
Worksheets("sheet1").Activate
Set r1 = Range("A1:B2")
Set r2 = Range("C34")
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
Excel中的Range属性
返回一个 Range 对象,该对象代表一个单元格或单元格区域。
语法:
expression.Range(Cell1, Cell2)
参数说明:
expression 必需。该表达式返回上面的对象之一。
Cell1 Variant 类型,必需。区域名称。必须为 A1 样式引用的宏语言。可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。也可包括货币符号,但它们被忽略掉。可在区域中任一部分使用局部定义名称。如果使用名称,则假定该名称使用的是宏语言。
Cell2 Variant 类型,可选。区域左上角和右下角的单元格。可以是一个包含单个单元格、整列或整行的 Range 对象,或是一个用宏语言为单个单元格命名的字符串。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3