您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 总结/报告 > EXCEL-VBA选择单元格
单元格区域引用方式的小结单元格区域引用方式的小结EXCEL技巧2008-11-2912:10:20阅读97评论0字号:大中小订阅在使用ExcelVBA进行编程时,我们通常需要频繁地引用单元格区域,然后再使用相应的属性和方法对区域进行操作。所谓单元格区域,指的是单个的单元格、或者是由多个单元格组成的区域、或者是整行、整列等。下面,我们设定一些情形,以问答的形式对引用单元格区域的方式进行归纳。--------------------------------------------------------------------------------问题一:在VBA代码中,如何引用当前工作表中的单个单元格(例如引用单元格C3)?回答:可以使用下面列举的任一方式对当前工作表中的单元格(C3)进行引用。(1)Range(C3)(2)[C3](3)Cells(3,3)(4)Cells(3,C)(5)Range(C4).Offset(-1)Range(D3).Offset(,-1)Range(A1).Offset(2,2)(6)若C3为当前单元格,则可使用:ActiveCell(7)若将C3单元格命名为“Range1”,则可使用:Range(Range1)或[Range1](8)Cells(4,3).Offset(-1)--------------------------------------------------------------------------------问题二:在VBA代码中,我要引用当前工作表中的B2:D6单元格区域,有哪些方式?回答:可以使用下面列举的任一方式对当前工作表中单元格区域B2:D6进行引用。(1)Range(“B2:D6”)(2)Range(B2,D6)(3)[B2:D6](4)Range(Range(B2),Range(D6))(5)Range(Cells(2,2),Cells(6,4))(6)若将B2:D6区域命名为“MyRange”,则又可以使用下面的语句引用该区域:①Range(MyRange)②[MyRange](7)Range(B2).Resize(5,3)(8)Range(A1:C5).Offset(1,1)(9)若单元格B2为当前单元格,则可使用语句:Range(ActiveCell,ActiveCell.Offset(4,2))(10)若单元格D6为当前单元格,则可使用语句:Range(B2,ActiveCell)--------------------------------------------------------------------------------问题三:在VBA代码中,如何使用变量实现对当前工作表中不确定单元格区域的引用?回答:有时,我们需要在代码中依次获取工作表中特定区域内的单元格,这通常可以采取下面的几种方式:(1)Range(“A”&i)(2)Range(“A”&i&“:C”&i)(3)Cells(i,1)(4)Cells(i,j)其中,i、j为变量,在循环语句中指定i和j的范围后,依次获取相应单元格。--------------------------------------------------------------------------------问题四:在VBA代码中,如何扩展引用当前工作表中的单元格区域?回答:可以使用Resize属性,例如:(1)ActiveCell.Resize(4,4),表示自当前单元格开始创建一个4行4列的区域。(2)Range(B2).Resize(2,2),表示创建B2:C3单元格区域。(3)Range(B2).Resize(2),表示创建B2:B3单元格区域。(4)Range(B2).Resize(,2),表示创建B2:C2单元格区域。如果是在一个单元格区域(如B3:E6),或一个命名区域中(如将单元格区域B3:E6命名为“MyRange”)使用Resize属性,则只是相对于单元格区域左上角单元格扩展区域,例如:代码Range(C3:E6).Resize(,2),表示单元格区域C3:D6,并且扩展的单元格区域可不在原单元格区域内。因此,可以知道Resize属性是相对于当前活动单元格或某单元格区域中左上角单元格按指定的行数或列数扩展单元格区域。--------------------------------------------------------------------------------问题五:在VBA代码中,如何在当前工作表中基于当前单元格区域或指定单元格区域处理其它单元格区域?回答:可以使用Offset属性,例如:(1)Range(A1).Offset(2,2),表示单元格C3。(2)ActiveCell.Offset(,1),表示当前单元格下一列的单元格。(3)ActiveCell.Offset(1),表示当前单元格下一行的单元格。(4)Range(C3:D5).Offset(,1),表示单元格区域D3:E5,即将整个区域偏移一列。从上面的代码示例可知,Offset属性从所指定的单元格开始按指定的行数和列数偏移,从而到达目的单元格,但偏移的行数和列数不包括指定单元格本身。--------------------------------------------------------------------------------问题六:在VBA代码中,如何在当前工作表中引用交叉区域?回答:可以使用Intersect方法,例如:Intersect(Range(C3:E6),Range(D5:F8)),表示单元格区域D5:E6,即单元格区域C3:E6与D5:F8相重迭的区域。--------------------------------------------------------------------------------问题七:在VBA代码中,如何在当前工作表中引用多个区域?回答:(1)可以使用Union方法,例如:Union(Range(C3:D4),Range(E5:F6)),表示单元格区域C3:D4和E5:F6所组成的区域。Union方法可以将多个非连续区域连接起来成为一个区域,从而可以实现对多个非连续区域一起进行操作。(2)也可以使用下面的代码:Range(C3:D4,E5:F6)或[C3:D4,E5:F6]注意:Range(C3:D4,F5:G6),表示单元格区域C3:G6,即将两个区域以第一个区域左上角单元格为起点,以第二个区域右下角单元格为终点连接成一个新区域。同时,在引用区域后使用Rows属性和Columns属性时,注意下面代码的区别:①Range(C3:D4,F8:G10).Rows.Count,返回的值为8;②Range(C3:D4,F8:G10).Rows.Count,返回的值为2,即只计算第一个单元格区域。引用多个单元格区域使用适当的方法可以很容易地同时引用多个单元格区域。可用Range和Union方法引用任意组合的单元格区域;用Areas属性可引用工作表上选定的一组单元格区域。使用Range属性通过在两个或多个引用之间放置逗号,可使用Range属性来引用多个单元格区域。下例清除了Sheet1上三个单元格区域的内容。SubClearRanges()Worksheets(Sheet1).Range(C5:D9,G9:H16,B14:D18)._ClearContentsEndSub命名区域使得用Range属性处理多个单元格区域更为容易。下例可在三个命名区域处于同一工作表时运行。SubClearNamed()Range(MyRange,YourRange,HisRange).ClearContentsEndSub使用Union方法用Union方法可将多个单元格区域组合到一个Range对象中。下例创建了名为myMultipleRange的Range对象,并将其定义为单元格区域A1:B2和C3:D4的组合,然后将该组合区域的字体设置为加粗。SubMultipleRange()Dimr1,r2,myMultipleRangeAsRangeSetr1=Sheets(Sheet1).Range(A1:B2)Setr2=Sheets(Sheet1).Range(C3:D4)SetmyMultipleRange=Union(r1,r2)myMultipleRange.Font.Bold=TrueEndSub使用Areas属性可用Areas属性引用选定的单元格区域或多块选定区域中的区域集合。下述过程计算选定区域中的块数目,如果有多个块,就显示一则警告消息。SubFindMultiple()IfSelection.Areas.Count1ThenMsgBoxCannotdothistoamultipleselection.EndIfEndSub--------------------------------------------------------------------------------问题八:在VBA代码中,如何引用当前工作表中活动单元格或指定单元格所在的区域(当前区域)?回答:可以使用CurrentRegion属性,例如:(1)ActiveCell.CurrentRegion,表示活动单元格所在的当前区域。(2)Range(D5).CurrentRegion,表示单元格D5所在的当前区域。当前区域是指周围由空行或空列所围成的区域。该属性的详细使用参见《CurrentRegion属性示例》一文。--------------------------------------------------------------------------------问题九:在VBA代码中,如何引用当前工作表中已使用的区域?回答:可以使用UsedRange属性,例如:(1)Activesheet.UsedRange,表示当前工作表中已使用的区域。(2)Worksheets(sheet1).UsedRange,表示工作表sheet1中已使用的区域。与CurrentRegion属性不同的是,该属性代表工作表中已使用的单元格区域,包括显示为空行,但已进行过格式的单元格区域。该属性的详细使用参见《解析UsedRange属性》一文。--------------------------------------------------------------------------------问题十:如何在单元格区域内指定特定的单元格?回答:可以使用Item属性,例如:(1)Range(A1:B10).Item(5,3)指定单元格C5,这个单元格处于以区域中左上角单元格A1(即区域中第1行第1列的单元格)为起点的第5行第3列。因为Item属性为默认属性,因此也可以简写为:Range(A1:B10)(5,3)。如果将A1:B10区域命名为”MyRange”,那么Range(MyRange)(5,3)也指定单元格C5。(2)Range(A1:B10)(12,13)指定单元格M12,即用这种方式引用单元格,该单元格不必一定要包含在区域内。同时,也不需要索引数值是正值,例如:①Range(D4:F6)(0,0)代表单元格C3;②Range(D4:F6)(-1,-2)代表单元格A2。而Range(D4:F6)(1,1)代表单元格D4。(3)也可以在单元格区域中循环,例如:Range(D4:F6)(2,2)(3,4)代表单元格H7,即该单元格位于作为左上角单元格E5的第3行第4列(因为E5是开始于区域中左上角单元格D4起的第2行第2列)。(4)也能使用一个单个的索引数值进行引用。计数方式为从左向右,即在区域中的第一行开始从左向右计数,第一行结束后,然后从第二行开始从左到右接着计数,依次类推。(注:从区域中第一行第一个单元格开始计数,当第一行结束时,转入第二行最左边的单元格,这样按一行
本文标题:EXCEL-VBA选择单元格
链接地址:https://www.777doc.com/doc-5469596 .html