VBA常用技巧(一) 下载本文

第1章 Range(单元格)对象

Range对象是Excel应用程序中最常用的对象,一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,甚至是多个工作表上的一组单元格,在操作Excel 内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的方法和属性。

i. 单元格的引用方法

在VBA中经常需要引用单元格或单元格区域区域,主要有以下几种方法。

1. 使用Range属性

VBA中可以使用Range属性返回单元格或单元格区域,如下面的代码所示。

#001 Sub RngSelect()

#002 Sheet1.Range(\#003 End Sub

代码解析:

RngSelect过程使用Select方法选中A3:F6,B1:C5单元格区域。

Range属性返回一个Range对象,该对象代表一个单元格或单元格区域,语法如下:

Range(Cell1, Cell2)

参数Cell1是必需的,必须为 A1 样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。也可包括美元符号(即绝对地址,如“$A$1”)。可在区域中任一部分使用局部定义名称,如Range(\,其中LastCell为已定义的单元格区域名称。

参数Cell2是可选的,区域左上角和右下角的单元格。

运行Sub RngSelect过程,选中A3:F6, B1:C5单元格区域,如图 i-1所示。

图 i-1

使用Range属性引用单元格区域

注意 如果没有使用对象识别符,Range属性返回活动表的一个区域,如果活动表不是工作表,则该属性无效。

2. 使用Cells属性

使用Cells属性返回一个Range对象,如下面的代码所示。

#001 Sub Cell()

#002 Dim icell As Integer #003 For icell = 1 To 100

#004 Sheet2.Cells(icell, 1).Value = icell #005 Next #006 End Sub

代码解析:

Cell过程使用For...Next语句为工作表中的A1:A100单元格区域填入序号。 Cells属性指定单元格区域中的单元格,语法如下:

Cells(RowIndex, ColumnIndex)

参数RowIndex是可选的,表示引用区域中的行序号。 参数ColumnIndex是可选的,表示引用区域中的列序号。 如果缺省参数,Cells属性返回引用对象的所有单元格。

Cells属性的参数可以使用变量,因此经常应用于在单元格区域中循环。

使用快捷记号

在VBA中可以将A1引用样式或命名区域名称使用方括号括起来,作为Range属性的快捷方式,这样就不必键入单词“Range”或使用引号,如下面的代码所示。

#001 Sub Fastmark() #002 [A1:A5] = 2 #003 [Fast] = 4 #004 End Sub

代码解析:

Fastmark过程使用快捷记号为单元格区域赋值。

第2行代码使用快捷记号将活动工作表中的A1:A5单元格赋值为2。 第3行代码将工作簿中已命名为“Fast”的单元格区域赋值为4。

注意 使用快捷记号引用单元格区域时只能使用固定字符串而不能使用变量。

使用Offset属性

可以使用Range对象的Offset属性返回一个基于引用的Range对象的单元格区域,如下面的代码所示。

#001 Sub Offset()

#002 Sheet3.Range(\#003 End Sub

代码解析:

Offset过程使用Range对象的Offset属性选中A1:A3单元格偏移三行三列后的区域。 应用于Range对象的Offset 属性的语法如下:

expression.Offset(RowOffset, ColumnOffset)

参数expression是必需的,该表达式返回一个Range对象。

参数RowOffset是可选的,区域偏移的行数(正值、负值或 0(零))。正值表示向下偏移,负值表示向上偏移,默认值为 0。

参数ColumnOffset是可选的,区域偏移的列数(正值、负值或 0(零))。正值表示向右偏移,负值表示向左偏移,默认值为 0。

运行Offset过程,选中A1:A3单元格偏称三行三列后的区域,如图 i-2所示。

图 i-2

使用Range对象的Offset属性

使用Resize属性

使用Range对象的Resize属性调整指定区域的大小,并返回调整大小后的单元格区域,如下面的代码所示。

#001 Sub Resize()

#002 Sheet4.Range(\#003 End Sub

代码解析:

Resize过程使用Range对象的Resize属性选中A1单元格扩展为三行三列后的区域。 Resize属性的语法如下:

expression.Resize(RowSize, ColumnSize)

参数expression是必需的,返回要调整大小的Range 对象

参数RowSize是可选的,新区域中的行数。如果省略该参数,则该区域中的行数保持不变。

参数ColumnSize是可选的,新区域中的列数。如果省略该参数。则该区域中的列数保持不变。

运行Resize过程,选中A1单元格扩展为三行三列后的区域,如图 i-3所示。

图 i-3

使用Resize属性调整区域大小