Excel_VBA_编程教程(完整版)excel高级教程VBA - Excel编程概念之:【单元格和区域】一、如何引用单元格和区域使用Visual Basic 的普通任务是指定单元格或单元格区域,然后对该单元格或单元格区域进行一些操作,如输入公式或更改格式。
通常用一条语句就能完成操作,该语句可标识单元格,还可更改某个属性或应用某个方法。
在Visual Basic 中,Range 对象既可表示单个单元格,也可表示单元格区域。
下列主题说明了标识和处理Range 对象最常用的方法。
用A1 样式记号引用单元格和单元格区域可使用Range 属性来引用A1 引用样式中的单元格或单元格区域。
下述子程序将单元格区域A1:D5 的字体设置为加粗。
Sub FormatRange()Workbooks("Book1").Sheets("Sheet1").Range("A1:D5") _.Font.Bold = TrueEnd Sub 下表演示了使用Range 属性的一些A1 样式引用。
引用含义Range("A1") 单元格A1Range("A1:B5") 从单元格A1 到单元格B5 的区域Range("C5:D9,G9:H16") 多块选定区域Range("A:A") A 列Range("1:1") 第一行Range("A:C") 从A 列到C 列的区域Range("1:5") 从第一行到第五行的区域Range("1:1,3:3,8:8") 第1、3 和8 行Range("A:A,C:C,F:F") A 、C 和F 列用编号引用单元格通过使用行列编号,可用Cells 属性来引用单个单元格。
该属性返回代表单个单元格的Range 对象。
下例中,Cells(6,1) 返回Sheet1 上的单元格A6,然后将Value 属性设置为10。
Sub EnterValue()Worksheets("Sheet1").Cells(6, 1).Value = 10End Sub因为可用变量替代编号,所以Cells 属性非常适合于在单元格区域中循环,如下例所示。
Dim Counter As IntegerFor Counter = 1 To 20Worksheets("Sheet1").Cells(Counter, 3).Value = Counter Next CounterEnd Sub注意如果要同时更改某一单元格区域中所有单元格的属性或对其应用方法,可使用Range 属性。
有关详细信息,请参阅用A1 样式记号引用单元格。
引用行和列可用Rows 属性或Columns 属性来处理整行或整列。
这两个属性返回代表单元格区域的Range 对象。
下例中,用Rows(1) 返回Sheet1 上的第一行,然后将单元格区域的Font 对象的Bold 属性设置为True。
Sub RowBold()Worksheets("Sheet1").Rows(1).Font.Bold = TrueEnd Sub下表举例说明了使用Rows 和Columns 属性的一些行和列的引用。
引用含义Rows(1) 第一行Rows 工作表上所有的行Columns(1) 第一列Columns("A") 第一列Columns 工作表上所有的列若要同时处理若干行或列,请创建一个对象变量并使用Union 方法,将对Rows 属性或Columns 属性的多个调用组合起来。
下例将活动工作簿中第一张工作表上的第一行、第三行和第五行的字体设置为加粗。
Sub SeveralRows()Worksheets("Sheet1").ActivateDim myUnion As RangeSet myUnion = Union(Rows(1), Rows(3), Rows(5))myUnion.Font.Bold = TrueEnd Sub用快捷记号引用单元格可用方括号将A1 引用样式或命名区域括起来,作为Range 属性的快捷方式。
这样就不必键入单词“Range”或使用引号,如下例所示。
Worksheets("Sheet1").[A1:B5].ClearContentsEnd SubSub SetValue()[MyRange].Value = 30End Sub引用命名区域用名称比用A1 样式记号更容易标识单元格区域。
若要命名选定的单元格区域,请单击编辑栏左端的名称框,键入名称,再按Enter。
引用命名区域下例引用了名为“MyBook.xls”的工作簿中的名为“MyRange”的单元格区域。
Sub FormatRange()Range("MyBook.xls!MyRange").Font.Italic = TrueEnd Sub下例引用名为“Report.xls”的工作簿中的特定工作表单元格区域“Sheet1!Sales”。
Sub FormatSales()Range("[Report.xls]Sheet1!Sales").BorderAround Weight:=xlthinEnd Sub若要选定命名区域,请用GoTo方法,该方法将激活工作簿和工作表,然后选定该区域。
Sub ClearRange()Application.Goto Reference:="MyBook.xls!MyRange"Selection.ClearContentsEnd Sub下例显示对于活动工作簿将如何编写相同的过程。
Sub ClearRange()Application.Goto Reference:="MyRange"Selection.ClearContentsEnd Sub在命名区域中的单元格上循环下例用For Each...Next 循环语句在命名区域中的每一个单元格上循环。
如果该区域中的任一单元格的值超过limit 的值,就将该单元格的颜色更改为黄色。
Sub ApplyColor()Const Limit As Integer = 25For Each c In Range("MyRange")If c.Value > Limit Thenc.Interior.ColorIndex = 27End IfNext cEnd Sub相对于其他单元格来引用单元格处理相对于另一个单元格的某一单元格的常用方法是使用Offset 属性。
下例中,将位于活动工作表上活动单元格下一行和右边三列的单元格的内容设置为双下划线格式。
Sub Underline()ActiveCell.Offset(1, 3).Font.Underline = xlDoubleEnd Sub注意可录制使用Offset 属性(而不是绝对引用)的宏。
在“工具”菜单上,指向“宏”,再单击“录制新宏”,然后单击“确定”,再单击录制宏工具栏上的“相对引用”按钮。
若要在单元格区域中循环,请在循环中将变量与Cells 属性一起使用。
下例以 5 为步长,用 5 到100 之间的值填充第三列的前20 个单元格。
变量counter 用作Cells 属性的行号。
Sub CycleThrough()Dim counter As IntegerFor counter = 1 To 20Worksheets("Sheet1").Cells(counter, 3).Value = counter * 5 Next counterEnd Sub用Range 对象引用单元格如果将对象变量设置为Range 对象,即可用变量名方便地操作单元格区域。
下述过程创建了对象变量myRange,然后将活动工作簿中Sheet1 上的单元格区域A1:D5 赋予该变量。
随后的语句用该变量代替该区域对象,以修改该区域的属性。
Sub Random()Dim myRange As RangeSet myRange = Worksheets("Sheet1").Range("A1:D5")myRange.Formula = "=RAND()"myRange.Font.Bold = TrueEnd Sub引用工作表上的所有单元格如果对工作表应用Cells 属性时不指定编号,该属性将返回代表工作表上所有单元格的Range 对象。
下述Sub 过程清除活动工作簿中Sheet1 上的所有单元格的内容。
Sub ClearSheet()Worksheets("Sheet1").Cells.ClearContentsEnd Sub引用多个单元格区域使用适当的方法可以很容易地同时引用多个单元格区域。
可用Range 和Union 方法引用任意组合的单元格区域;用Areas 属性可引用工作表上选定的一组单元格区域。
使用Range 属性通过在两个或多个引用之间放置逗号,可使用Range 属性来引用多个单元格区域。
下例清除了Sheet1 上三个单元格区域的内容。
Sub ClearRanges()Worksheets("Sheet1").Range("C5:D9,G9:H16,B14:D18"). _ClearContentsEnd Sub命名区域使得用Range 属性处理多个单元格区域更为容易。
下例可在三个命名区域处于同一工作表时运行。
Sub ClearNamed()Range("MyRange, YourRange, HisRange").ClearContentsEnd Sub使用Union 方法用Union 方法可将多个单元格区域组合到一个Range 对象中。
下例创建了名为myMultipleRange的Range 对象,并将其定义为单元格区域A1:B2 和C3:D4 的组合,然后将该组合区域的字体设置为加粗。
Sub MultipleRange()Dim r1, r2, myMultipleRange As Range Set r1 = Sheets("Sheet1").Range("A1:B2")Set r2 = Sheets("Sheet1").Range("C3:D4")Set myMultipleRange = Union(r1, r2)myMultipleRange.Font.Bold = TrueEnd Sub使用Areas 属性可用Areas 属性引用选定的单元格区域或多块选定区域中的区域集合。