1EXCELVBA常用代码解析Range对象是Excel应用程序中最常用的对象,一个Range对象代表一个单元格、一行、一列、包含一个或者更多单元格区域(可以是连续的单元格,也可以是不连续的单元格)中选定的单元格,甚至是多个工作表上的一组单元格,在操作Excel内的任何区域之前都需要将其表示为一个Range对象,然后使用该Range对象的方法和属性。▲001单元格的引用方法在VBA中经常需要引用单元格或单元格区域区域,主要有以下几种方法。001-1使用Range属性VBA中可以使用Range属性返回单元格或单元格区域,如下面的代码所示。SubRngSelect()Sheet1.Range(A3:F6,B1:C5).SelectEndSub代码解析:RangeSelect过程使用Select方法选中A3:F6,B1:C5单元格区域。Range属性返回一个Range对象,该对象代表一个单元格或单元格区域,语法如下:Range(Cell1,Cell2)参数Cell1是必需的,必须为A1样式引用的宏语言,可包括区域操作符(冒号)、相交区域操作符(空格)或合并区域操作符(逗号)。也可包括美元符号(即绝对地址,如“$A$1”)。可在区域中任一部分使用局部定义名称,如Range(B2:LastCell),其中LastCell为已定义的单元格区域名称。参数Cell2是可选的,区域左上角和右下角的单元格。运行RangeSelect过程,选中A3:F6,B1:C5单元格区域。001-2使用Cells属性使用Cells属性返回一个Range对象,如下面的代码所示。SubCell()DimicellAsIntegerForicell=1To100Sheet2.Cells(icell,1).Value=icellNextEndSub代码解析:Cell过程使用For...Next语句为工作表中的A1:A100单元格区域填入序号。Cells属性指定单元格区域中的单元格,语法如下:Cells(RowIndex,ColumnIndex)参数RowIndex是可选的,表示引用区域中的行序号。参数ColumnIndex是可选的,表示引用区域中的列序号。如果缺省参数,Cells属性返回引用对象的所有单元格。Cells属性的参数可以使用变量,因此经常应用于在单元格区域中循环。001-3使用快捷记号在VBA中可以将A1引用样式或命名区域名称使用方括号括起来,作为Range属性的快捷方式,这样就不必键入单词“Range”或使用引号,如下面的代码所示。SubFastmark()[A1:A5]=2[Fast]=4EndSub代码解析:Fastmark过程使用快捷记号为单元格区域赋值。第2行代码使用快捷记号将活动工作表中的A1:A5单元格赋值为2。第3行代码将工作簿中已命名为“Fast”的单元格区域赋值为4。注意使用快捷记号引用单元格区域时只能使用固定字符串而不能使用变量。001-4使用Offset属性可以使用Range对象的Offset属性返回一个基于引用的Range对象的单元格区域,如下面的代码所示。SubOffset()Sheet3.Range(A1:C3).Offset(3,3).SelectEndSub2代码解析:Offset过程使用Range对象的Offset属性选中A1:A3单元格偏移三行三列后的区域。应用于Range对象的Offset属性的语法如下:expression.Offset(RowOffset,ColumnOffset)参数expression是必需的,该表达式返回一个Range对象。参数RowOffset是可选的,区域偏移的行数(正值、负值或0(零))。正值表示向下偏移,负值表示向上偏移,默认值为0。参数ColumnOffset是可选的,区域偏移的列数(正值、负值或0(零))。正值表示向右偏移,负值表示向左偏移,默认值为0。运行Offset过程,选中A1:A3单元格偏称三行三列后的区域。001-5使用Resize属性使用Range对象的Resize属性调整指定区域的大小,并返回调整大小后的单元格区域,如下面的代码所示。SubResize()Sheet4.Range(A1).Resize(3,3).SelectEndSub代码解析:Resize过程使用Range对象的Resize属性选中A1单元格扩展为三行三列后的区域。Resize属性的语法如下:expression.Resize(RowSize,ColumnSize)参数expression是必需的,返回要调整大小的Range对象参数RowSize是可选的,新区域中的行数。如果省略该参数,则该区域中的行数保持不变。参数ColumnSize是可选的,新区域中的列数。如果省略该参数。则该区域中的列数保持不变。运行Resize过程,选中A1单元格扩展为三行三列后的区域。001-6使用Union方法使用Union方法可以将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作,如下面的代码所示。SubUnSelect()Union(Sheet5.Range(A1:D4),Sheet5.Range(E5:H8)).SelectEndSub代码解析:UnSelect过程选择单元格A1:D4和E5:H8所组成的区域。Union方法返回两个或多个区域的合并区域,语法如下:expression.Union(Arg1,Arg2,...)其中参数expression是可选的,返回一个Application对象。参数Arg1,Arg2,...是必需的,至少指定两个Range对象。运行UnSelect过程,选中单元格A1:D4和E5:H8所组成的区域。001-7使用UsedRange属性使用UsedRange属性返回指定工作表上已使用单元格组成的区域,如下面的代码所示。SubUseSelect()EndSub代码解析:UseSelect过程使用UsedRange属性选择工作表上已使用单元格组成的区域,包括空单元格。如工作表中已使用A1单元格和D8单元格,运行UseSelect过程将选择A1到D8单元格区域。001-8使用CurrentRegion属性使用CurrentRegion属性返回指定工作表上当前的区域,如下面的代码所示。SubCurrentSelect()Sheet7.Range(A5).CurrentRegion.SelectEndSub代码解析:CurrentSelect过程使用CurrentRegion属性选择工作表上A5单元格当前的区域,当前区域是一个边缘是任意空行和空列组合成的范围。运行CurrentSelect过程将选择A5到B6单元格区域。3▲002选定单元格区域的方法002-1使用Select方法在VBA中一般使用Select方法选定单元格或单元格区域,如下面的代码所示。SubRngSelect()Sheet3.ActivateSheet3.Range(A1:B10).SelectEndSub代码解析:RngSelect过程使用Select方法选定Sheet3中的A1:B10单元格区域,Select方法应用于Range对象时语法如下:expression.Select(Replace)参数expression是必需的,一个有效的对象。参数Replace是可选的,要替换的对象。使用Select方法选定单元格时,单元格所在的工作表必需为活动工作表,所以先使用Activate方法使Sheet3成为活动工作表,否则Select方法有可能出错,显示错误提示。002-2使用Activate方法还可以使用Activate方法选定单元格或单元格区域,如下面的代码所示。SubRngActivate()Sheet3.ActivateSheet3.Range(A1:B10).ActivateEndSub代码解析:RngActivate过程使用Activate方法选定Sheet3中的A1:B10单元格区域,Activate方法应用于Range对象时语法如下:expression.Activate使用Activate方法选定单元格时,单元格所在的工作表也必需为活动工作表,否则Activate方法有可能出错,显示错误提示。002-3使用Goto方法使用Goto方法无需使单元格所在的工作表成为活动工作表,如下面的代码所示。SubRngGoto()Application.GotoReference:=Sheet3.Range(A1:B10),scroll:=TrueEndSub代码解析:RngGoto过程使用Goto方法选定Sheet3中的A1:B10单元格区域,并滚动工作表以显示该单元格。Goto方法选定任意工作簿中的任意区域或任意VisualBasic过程,并且如果该工作簿未处于活动状态,就激活该工作簿,语法如下:expression.Goto(Reference,Scroll)参数expression是必需的,返回一个Application对象。参数Reference是可选的,Variant类型,指定目标。可以是Range对象、包含R1C1-样式记号的单元格引用的字符串或包含VisualBasic过程名的字符串。如果省略本参数,目标将是最近一次用Goto方法选定的区域。参数Scroll是可选的,Variant类型,如果该值为True,则滚动窗口直至目标区域的左上角单元格出现在窗口的左上角。如果该值为False,则不滚动窗口。默认值为False。▲003获得指定行、列中的最后一个非空单元格使用VBA对工作表进行操作时,经常需要定位到指定行或列中最后一个非空单元格,此时可以使用Range对象的End属性,在取得单元格对象后便能获得该单元格的相关属性,如单元格地址、行列号、数值等,如下面的代码所示。SubLastRow()DimrngAsRangeSetrng=Sheet1.Range(A65536).End(xlUp)MsgBoxA列中最后一个非空单元格是&rng.Address(0,0)_&,行号&rng.Row&,数值&rng.ValueSetrng=NothingEndSub代码解析:LastRow过程使用消息框显示工作表中A列最后非空单元格的地址、行号和数值。4End属性返回一个Range对象,该对象代表包含源区域的区域尾端的单元格。等同于按键End+向上键、End+向下键、End+向左键或End+向右键,语法如下:expression.End(Direction)参数expression是必需的,一个有效的对象。参数Direction是可选的,所要移动的方向,可以为XlDirection常量之一。Range对象的End属性返回的是一个Range对象,因此可以直接使用该对象的属性和方法。通过修改相应的参数,能够获得指定行中最后一个非空单元格,如下面的代码所示。SubLastColumn()DimrngAsRangeSetrng=Sheet1.Range(IV1).End(xlToLeft)MsgBox第一行中最后一个非空单元格是&rng.Address(0,0)_&,列号&rng.Column&,数值&rng.ValueSetrng=NothingEndSub代码解析:LastColumn过程使用消息框显示工作表中第一行最后一个非空单元格的地址、列号和数值。▲004定位单元格在Excel中使用定位对话框可以选中工作表中特定的单元格区域,而在VBA中则使用SpecialCells方法,如下面的代码所示。SubSpecialAddress()DimrngAsRangeSetrng=rng.SelectMsgBox工作表中有公式的单元格为:&rng.AddressSetrng=NothingEndSub代码解析:SpecialAddress过程使用SpecialCells方法选中工作表中有公式的单元格,并用消息框显示其地址。SpecialCells方法返回一个Range对象