加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Excel一日一贴(2011-3-19)在宏代码中引用单元格区域的五种方法

(2011-03-20 00:05:41)
标签:

单元格

属性

参数

工作表

分类: Excel

    所谓单元格区域,是指工作表中的单个单元格、有多个单元格组成的区域,或者是整行、整列等。VBA中引用单元格区域主要的方法有以下几种:

 

方法一、使用A1样式引用

       A1样式记号使用Range属性返回单元格区域。在A1样式中按照字母顺序标记列,按照数字顺序标记行(这与工作表中一致),例如B列第三行单元格的A1样式引用为Range(”B3”).

       Range属性的语法如下:

       Range(cell 1,cell 2)

       参数cell 1 为必须按参数,可以包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号),也可以包括美元符号(绝对地址引用)。可以在区域中的任一部分使用拒不定义名称,如:

Range(“B2: LastCell”),其中LastCell为已定义的单元格区域名称。

      

       如果想将单元格C2指定值为字符串“Microsoft Excel 2003”,可用如下代码:

       Range(“C2”).Value=”Microsoft Excel 2003”

      

    如果想要清除单元格区域A1:B6、D1:D6和F1:F6的内容,可用如下代码:

Range(“A1:B6,D1:D6,F1:F6”).ClearContents

 

如果想要选中单元格区域A3:F6和单元格区域B1:C5相交叉的区域B3:C5,可用如下代码:

Range(“A3:F6  B1:C5”).Select

(当然引用交叉区域和合并区域通常采用Intersect和Union方法)

 

参数cell2为可选参数,使用此参数将返回包含参数cell1所表示区域和参数cell2表示区域的最小单元格区域。

如果运行下述代码,则将选定包含B6:H8和D3:F10的最小区域B3:H10

Range(“B6:H8”,”D3:F10”).Select

当然此种引用方式能够使用单个参数的A1引用方式来代替,如下面代码与上例的记过相同:

Range(“B6:H8:D3:F10”).Select

 

方法二、使用行列编号

       在VBA中可以使用Cells属性通过行列编号引用单个单元格,Cells属性的语法如下:

Cells(RowIndex, ColumnIndex)

       其参数均为可选参数,分别表示引用区域的行序号和列序号。默认参数的Cells属性返回引用对象的所有单元格

       带有参数的Cells属性返回代表单个单元格的Range对象。

       当只指定RowIndex参数时,RowIndex表示要引用的单元格的索引号,顺序为由左到右,先上后下(类似二位数组)。一下代码显示了该参数的用法:

Sub CellsindexDemo()

Range("D4:F8").Select

    Dim i As Single

    With Selection

        For i = 1 To .Cells.Count

            .Cells(i) = i

        Next i

    End With

End Sub

 

结果如图1所示

 

http://s14/bmiddle/70fa8d2a49ed80e0aabdd&690



 

图1

 

    ColunmIndex参数指定要访问的单元格所在列号的数字或字符串,1或者“A”都表示区域中的第一列。例如Cells(3,2)和Cells(3,”B”)都引用B3单元格。

   当至指定ColumnIndex参数时,RowIndex参数的默认值为1,返回属性应用对象指定列的第1个单元格。如ActiveSheet.Cells(,3)相当于ActiveSheet.Cells(1,3),

返回当前活动工作表的C1单元格。

   Cells属性的参数可以使用变量,因此经常应用在单元格区域中循环,下面的过程为活动工作表中的C1:C100单元格区域填入序号。

Sub CycleThrough()

    Dim Counter As Integer

    For Counter = 1 To 100

        ActiveSheet.Cells(Counter, "H").Value = Counter

    Next Counter

End Sub

 

方法三、使用快捷记号

   将A1引用样式或者明明区域名称使用方括号括起来,作为Range属性(?书中为属性,是否应该为对象呢?)的快捷方式,这样就不必键入单词”Range”或使用引号,可以实现快捷输入。

   下面的代码将使用快捷记号将数值2赋给A1单元格:

Worksheets(“sheet1”).[A1]=2

   对于Range对象,默认属性是Value属性。

   下面的代码将单元格区域B3:E6为Range对象变量rng赋值:

Set rng = [B3:E6]

   需要注意的是,使用快捷记号引用单元格区域是只能使用固定字符串而不能使用变量

 

方法四、使用Offset属性

   Range对象的Offset属性返回一个基于引用的Range对象的单元格区域且与其大小相同的单元格区域,Offset属性的语法如下:

Offset(RowOffset, ColunmOffset)

  其中,RowOffset和ColunmOffset参数分别表示相对于引用单元格区域偏移的行数和列数(正值、负值或0)正值表示向下(右)偏移,负值相反,默认值为0。例如:

Range(“A1:C3”).Offset(3,3)返回D4:F6的单元格区域。

 

方法五、使用Resize属性

    Range对象的Resize属性用于调整指定区域的大小,并返回调整大小后的单元格区域,与引用的单元格区域的大小和形状无关,默认基于该区域左上角的单元格进行调整。Resize属性的语法如下:

Resize(Rowsize,Columnsize)

   其中,Rowsize参数和Columnsize参数分别代表调整后的单元格区域的行数和列数。

   以下代码选中A1单元格扩展为3行3列后的区域(A1:C3):

Range(“A1”).Resize(3,3)

 

    下面通过一个例子来掩饰上述几种属性的组合使用,本例选定工作表中偶那个的数据区域,而不包含标题栏即第一行,结果如图2所示

 

http://s5/bmiddle/70fa8d2a49ed80fca4c24&690



图2

代码如下:

#001 Sub SelectData()

#002     Worksheets("sheet1").Activate

#003     Dim Rng As Range

#004     Set Rng = Range("A1").CurrentRegion

#005     Rng.Offset(1, 0).Resize(Rng.Rows.Count - 1, Rng.Columns.Count).Select

#006     Set Rng = Nothing

#007 End Sub

 

代码解析:

    第4行使用CurrentRegion属性取得包含A1单元格在内的当前区域,并将其赋值给Rng对象变量。当前区域是一个边缘为任意空行和孔烈或者工作表边缘组合成的矩形范围。在本例中,Range(“A1”).CurrentRegion返回A1:C8单元格区域。

    第5行代码先用Offset属性获取新区域,然后再调整新区域的大小至合适的要求

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有