Excel 2007 Range对象开发指南-上
来源:百度文库 编辑:神马文学网 时间:2024/07/07 01:33:04
2009年2月6日评论发表评论
这个是MSDN上的文章,介绍了Excel中最常用的Range对象的使用方法。也适用于Excel2007之前的版本。
概述
我们在Microsoft Office Excel2007中所做的大部分工作都是和单元格相关。同样,我们对Excel对象所做的大部分事情包括使用区域。一个Range可表示一个单元格、一行、一列或者包含一个或多个连续单元格块的选择、或者一个3-D区域。
Range属性返回一个Range对象。Range属性可以有两种表示方法。
expression.Range(cell1)expression.Range(cell1,cell2)
在第一个例子中,cell1表示一个单元格的区域;第二个例子中,两个数值表示连续单元格区域。在这些示例中,expression是一个必需的元素,必须是Application对象、Range对象或Worksheet对象的其中之一。如果它被省略,便默认是ActiveSheet对象。在第二个例子中,单元格分隔符可以说对象操作符(冒号),重叠操作符(空格),或合并操作符(逗号)。
今天才知道可以使用空格来做重叠操作,例如Range(”A1:C3 B2:D4)其实就是Range(”B2:C3″)。
在下面的几节中,你将学习使用Excel区域的多种操作方法。然而,这些示例只是你可以操作区域的一部分方法。更多关于Range对象模型成员的资料请参考Range对象成员。
给单元格赋值
给单个单元格赋值很简单。
Worksheets("Sheet1").Range("A1").Value=3.14159
同样,可以使用下面的方法给已命名的单元格赋值。
ActiveSheet.Range("MyCell").Value=1
下面的例子给单元格区域插入同样的一个数值。
Worksheets("Sheet1").Range("A1:B10").Value=1
使用在第一节中介绍过的Range属性第二种表示方法,你可以实现同样的结果。
Range("A1","B10")=1
注意Range引用的对象被省略,因此默认使用当前工作表。还有,Range对象的属性也被省略,则使用默认的Value属性,并赋值为1。
此外,当你使用第二种表示方法时,下面的语句将XYZ值赋给Sheet2的A1、A3和A5单元格。
Worksheets("Sheet2").Range("A1,A3,A5")="XYZ"
下面的例子中,在Sheet1的A1单元格中插入一个公式。
Worksheets("Sheet1").Range("A1").Formula="=10*RAND()"
这个例子遍历Sheet1的D1:D10单元格,如果其中一个单元格的String值等于“For Sale”,代码将替换该值为字符串“Sold”。
For Each c in Worksheets("Sheet1").Range("D1:D10")If c.Value="For Sale" Thenc.Value="Sold"End IfNext c
区域的表示方法
有几种方法表示一个区域
通过单元格地址 通过对另外一个单元格的偏移 通过名称 当前的选择
通过使用单元格地址有几种方法直接表示一个区域;通过使用ActiveSheet对象你可以使用绝对引用,或者通过使用ActiveCell对象或其它区域对象你可以使用相对引用。
在工作表中引用区域
当你使用区域时,大部分时间你指的是活动工作表上的一个区域。不过你可以方便的表示一个非活动工作簿中的区域。例如,如下面的例子,你可以使用Range属性表示ActiveSheet上的一个区域,这里指的是B1单元格到B15单元格的区域。
Range("B1:B15").Select
同样,也可以引用另外一个非活动工作表中的同样的单元格区域,你可以指定工作表的序号或名称。
Worksheets(2).Range("B1:B15").Select
你也可以不知道工作表而表示一个非活动工作表的区域,但必须在该区域有唯一名称时才行。
Range("SalesTax").Select
这个技巧不需要关心哪个工作表包含这个已命名的区域。
引用区域中的单个单元格
引用区域中的单元格同引用整个工作簿中的单元格使用同样的方法。例如,假设指定B4:E10为区域。要引用这个区域中的B4单元格,你可以使用Range对象中的A1。要引用这个区域中的D8单元格,你可以使用Range对象中的C5。
使用偏移引用一个区域中的单元格
Offset属性返回一个Range对象,它让你引用相对于另外一个单元格的单元格。通过指定距离指定位置的列和行数,你可以引用这个单元格。语法如下:
Object.Offset(rowOffset, columnOffset)
正值将焦点往下和右移动。负值将焦点往上和左移动。零表示当前单元格。例如,假设开始位置上单元格E5。
第一个语句在E5往下移一行的E6单元格插入1。
ActiveCell.Offset(1,0)=1
这一个语句在E5往右移一列的F5单元格插入1。
ActiveCell.Offset(0,1)=1
这一个语句在E5往左移3列的B5单元格插入1。
ActiveCell.Offset(0,-3)=1
下面的例子使用Offset属性计算一个移动平均值。
Sub MovingAvg()Dim rng As RangeDim lngRow As Long Set rng = Range("B1:B3") For lngRow = 3 To 12Cells(lngRow, "C").Value = WorksheetFunction.Sum(rng) / 3Set rng = rng.Offset(1, 0)Next lngRow End Sub
这个代码先设置B列中的前三个单元格为一个区域,将这些值的总和除以3,然后将平均值插入到C3单元格。然后使用Offset属性将该区域往下移动一行,但仍在B列中,这样就计算B2:B4区域中的值得平均值。这个值被插入到C4。这个计算过程一直重复到B12单元格。
引用一个命名区域中的单元格
一个命名区域拥有一个唯一的名称。Excel将定义的区域的名称保存在Names集合中,这个集合是Workbook对象的一个属性。命名区域是Excel中的一个强大的工具,让你可以给一个单元格或一个单元格区域赋予一个有意义的名称。例如,你可以给单元格C1赋予SalesTax的名称,然后在你正常使用单元格C1的任何时候使用SalesTax,例如下面的例子。
Total=Range("A1")*Range("SalesTax")
在文章的后面部分将更详细地讨论命名区域。
选择单元格区域
没有一个ActiveRange对象来表示活动区域,但有其它的方法来使用一个区域:Select方法让你选择一个单元格区域。当一个区域被选择后,你可以使用Selection对象来控制该区域选择的动作。
例如,你可以复制一个区域的值到剪贴板然后插入到一个新的工作表。
Range("D5").ActivateActiveCell.CurrentRegion.SelectSelection.CopySheets.Add After:=Sheets(Sheets.Count)Sheets(Sheets.Count).Name = "Sample"Sheets("Sample").SelectRange("D5").ActivateActiveSheet.Paste
在这个例子中,ActiveCell对象的CurrentRegion属性用来选择一个区域,这个例子中是D1,然后复制内容到剪贴板。一个新的工作表添加到最后一个工作表的后面,并将单元格内容复制到新的工作表。
你还可以对选择的区域执行其它的操作,例如以黑体显示选择的区域。
Selection.Font.Bold=True
下面的语句可以得到同样的结果。
Range("C5:C20").Font.Bold=True
除了CurrentRegion属性,你可以使用Range对象的End方法告诉Excel往哪个方向扩张区域。其中的枚举类型参数表示扩张的方向。
通过End方法返回的Range对象表示位于包含目标区域的范围尾端的单元格。使用End方法等同于按下END+UP键、END+DOWN键、END+LEFT键或END+RIGHT键。这个例子选择包含B4单元格的范围中B列最顶部的单元格。
Range("B4").End(xlUP).Select
这个例子选择包含B4单元格的范围中第4行最尾行的单元格。
Range("B4").End(xlToRight).Select
这个例子从B4单元格将选择扩展到包含数据的第4行最后一个单元格。
Worksheets("Sheet1").ActivateRange("B4",Range("B4").End(xlToRight)).Select
下面的例子使用End方法和方向枚举参数来汇总每一列的值。例如,假设你有很多列的数据,一直从B2单元格到G11,选择B1为活动单元格,运行宏,然后会将总和放到每列的顶端。
Sub SumBelow()Dim rng As Range ' 计算活动单元格下面区域的总和并复制总和到其它的列With ActiveCellSet rng = Range(.Offset(1), .Offset(1).End(xlDown)).Formula = "=SUM(" & _rng.Address(RowAbsolute:=False, ColumnAbsolute:=False) & ")".Copy Destination:=Range(.Cells(1), .Offset(1).End(xlToRight).Offset(-1))End With End Sub
这个是MSDN上的文章,介绍了Excel中最常用的Range对象的使用方法。也适用于Excel2007之前的版本。
概述
我们在Microsoft Office Excel2007中所做的大部分工作都是和单元格相关。同样,我们对Excel对象所做的大部分事情包括使用区域。一个Range可表示一个单元格、一行、一列或者包含一个或多个连续单元格块的选择、或者一个3-D区域。
Range属性返回一个Range对象。Range属性可以有两种表示方法。
expression.Range(cell1)expression.Range(cell1,cell2)
在第一个例子中,cell1表示一个单元格的区域;第二个例子中,两个数值表示连续单元格区域。在这些示例中,expression是一个必需的元素,必须是Application对象、Range对象或Worksheet对象的其中之一。如果它被省略,便默认是ActiveSheet对象。在第二个例子中,单元格分隔符可以说对象操作符(冒号),重叠操作符(空格),或合并操作符(逗号)。
今天才知道可以使用空格来做重叠操作,例如Range(”A1:C3 B2:D4)其实就是Range(”B2:C3″)。
在下面的几节中,你将学习使用Excel区域的多种操作方法。然而,这些示例只是你可以操作区域的一部分方法。更多关于Range对象模型成员的资料请参考Range对象成员。
给单元格赋值
给单个单元格赋值很简单。
Worksheets("Sheet1").Range("A1").Value=3.14159
同样,可以使用下面的方法给已命名的单元格赋值。
ActiveSheet.Range("MyCell").Value=1
下面的例子给单元格区域插入同样的一个数值。
Worksheets("Sheet1").Range("A1:B10").Value=1
使用在第一节中介绍过的Range属性第二种表示方法,你可以实现同样的结果。
Range("A1","B10")=1
注意Range引用的对象被省略,因此默认使用当前工作表。还有,Range对象的属性也被省略,则使用默认的Value属性,并赋值为1。
此外,当你使用第二种表示方法时,下面的语句将XYZ值赋给Sheet2的A1、A3和A5单元格。
Worksheets("Sheet2").Range("A1,A3,A5")="XYZ"
下面的例子中,在Sheet1的A1单元格中插入一个公式。
Worksheets("Sheet1").Range("A1").Formula="=10*RAND()"
这个例子遍历Sheet1的D1:D10单元格,如果其中一个单元格的String值等于“For Sale”,代码将替换该值为字符串“Sold”。
For Each c in Worksheets("Sheet1").Range("D1:D10")If c.Value="For Sale" Thenc.Value="Sold"End IfNext c
区域的表示方法
有几种方法表示一个区域
通过单元格地址 通过对另外一个单元格的偏移 通过名称 当前的选择
通过使用单元格地址有几种方法直接表示一个区域;通过使用ActiveSheet对象你可以使用绝对引用,或者通过使用ActiveCell对象或其它区域对象你可以使用相对引用。
在工作表中引用区域
当你使用区域时,大部分时间你指的是活动工作表上的一个区域。不过你可以方便的表示一个非活动工作簿中的区域。例如,如下面的例子,你可以使用Range属性表示ActiveSheet上的一个区域,这里指的是B1单元格到B15单元格的区域。
Range("B1:B15").Select
同样,也可以引用另外一个非活动工作表中的同样的单元格区域,你可以指定工作表的序号或名称。
Worksheets(2).Range("B1:B15").Select
你也可以不知道工作表而表示一个非活动工作表的区域,但必须在该区域有唯一名称时才行。
Range("SalesTax").Select
这个技巧不需要关心哪个工作表包含这个已命名的区域。
引用区域中的单个单元格
引用区域中的单元格同引用整个工作簿中的单元格使用同样的方法。例如,假设指定B4:E10为区域。要引用这个区域中的B4单元格,你可以使用Range对象中的A1。要引用这个区域中的D8单元格,你可以使用Range对象中的C5。
使用偏移引用一个区域中的单元格
Offset属性返回一个Range对象,它让你引用相对于另外一个单元格的单元格。通过指定距离指定位置的列和行数,你可以引用这个单元格。语法如下:
Object.Offset(rowOffset, columnOffset)
正值将焦点往下和右移动。负值将焦点往上和左移动。零表示当前单元格。例如,假设开始位置上单元格E5。
第一个语句在E5往下移一行的E6单元格插入1。
ActiveCell.Offset(1,0)=1
这一个语句在E5往右移一列的F5单元格插入1。
ActiveCell.Offset(0,1)=1
这一个语句在E5往左移3列的B5单元格插入1。
ActiveCell.Offset(0,-3)=1
下面的例子使用Offset属性计算一个移动平均值。
Sub MovingAvg()Dim rng As RangeDim lngRow As Long Set rng = Range("B1:B3") For lngRow = 3 To 12Cells(lngRow, "C").Value = WorksheetFunction.Sum(rng) / 3Set rng = rng.Offset(1, 0)Next lngRow End Sub
这个代码先设置B列中的前三个单元格为一个区域,将这些值的总和除以3,然后将平均值插入到C3单元格。然后使用Offset属性将该区域往下移动一行,但仍在B列中,这样就计算B2:B4区域中的值得平均值。这个值被插入到C4。这个计算过程一直重复到B12单元格。
引用一个命名区域中的单元格
一个命名区域拥有一个唯一的名称。Excel将定义的区域的名称保存在Names集合中,这个集合是Workbook对象的一个属性。命名区域是Excel中的一个强大的工具,让你可以给一个单元格或一个单元格区域赋予一个有意义的名称。例如,你可以给单元格C1赋予SalesTax的名称,然后在你正常使用单元格C1的任何时候使用SalesTax,例如下面的例子。
Total=Range("A1")*Range("SalesTax")
在文章的后面部分将更详细地讨论命名区域。
选择单元格区域
没有一个ActiveRange对象来表示活动区域,但有其它的方法来使用一个区域:Select方法让你选择一个单元格区域。当一个区域被选择后,你可以使用Selection对象来控制该区域选择的动作。
例如,你可以复制一个区域的值到剪贴板然后插入到一个新的工作表。
Range("D5").ActivateActiveCell.CurrentRegion.SelectSelection.CopySheets.Add After:=Sheets(Sheets.Count)Sheets(Sheets.Count).Name = "Sample"Sheets("Sample").SelectRange("D5").ActivateActiveSheet.Paste
在这个例子中,ActiveCell对象的CurrentRegion属性用来选择一个区域,这个例子中是D1,然后复制内容到剪贴板。一个新的工作表添加到最后一个工作表的后面,并将单元格内容复制到新的工作表。
你还可以对选择的区域执行其它的操作,例如以黑体显示选择的区域。
Selection.Font.Bold=True
下面的语句可以得到同样的结果。
Range("C5:C20").Font.Bold=True
除了CurrentRegion属性,你可以使用Range对象的End方法告诉Excel往哪个方向扩张区域。其中的枚举类型参数表示扩张的方向。
通过End方法返回的Range对象表示位于包含目标区域的范围尾端的单元格。使用End方法等同于按下END+UP键、END+DOWN键、END+LEFT键或END+RIGHT键。这个例子选择包含B4单元格的范围中B列最顶部的单元格。
Range("B4").End(xlUP).Select
这个例子选择包含B4单元格的范围中第4行最尾行的单元格。
Range("B4").End(xlToRight).Select
这个例子从B4单元格将选择扩展到包含数据的第4行最后一个单元格。
Worksheets("Sheet1").ActivateRange("B4",Range("B4").End(xlToRight)).Select
下面的例子使用End方法和方向枚举参数来汇总每一列的值。例如,假设你有很多列的数据,一直从B2单元格到G11,选择B1为活动单元格,运行宏,然后会将总和放到每列的顶端。
Sub SumBelow()Dim rng As Range ' 计算活动单元格下面区域的总和并复制总和到其它的列With ActiveCellSet rng = Range(.Offset(1), .Offset(1).End(xlDown)).Formula = "=SUM(" & _rng.Address(RowAbsolute:=False, ColumnAbsolute:=False) & ")".Copy Destination:=Range(.Cells(1), .Offset(1).End(xlToRight).Offset(-1))End With End Sub
Excel 2007 Range对象开发指南-上
Excel 2007 Application对象开发指南
Range对象基本操作应用示例
Symbian编程三部曲—明确开发对象,SDK工具下载指南
如何正确地释放Excel对象?
再说Excel的对象模型
WML开发详细指南
jbpm开发指南
jbpm开发指南2
开发环境配置指南
FreeMarker开发指南
FreeMarker开发指南
FreeMarker开发指南
软件开发过程指南
Linux 汇编语言开发指南
jbpm开发指南
Linux 汇编语言开发指南
开发环境配置指南
Struts Validator 开发指南
Excel Application对象应用大全(转载)
Excel Application对象应用大全wn
使用ADO Recordset对象导入Excel
对象模型图【OMD】阅读指南
linux 开发指南-3 - 磨练