在第七节中,我给大家简单结束了一下range对象,让大家知道了range拥有一个value属性,以及range可以用cells的行列的表示方法。因为range是整个Excel工作簿的基础构成,相对于人体的细胞。所以本节再次深入了解一下range对象。
一、range的多种引用方法
假设我们要引用A1单元格,除了可以用range(“A1″), cells(1,1),还有一种方法,就是把cells的第1列,改成第A列,也就是说cells(1,”A”)其实也是表示A1单元格
我们上节已经知道,如果要引用多个单元格,或者说合并单元格,可以使用“:”来连接,比如range(“A1:B4”)就是指下面的区域。
如果我们要引用多个区域,可以用逗号隔开,比如这样,range( “A1:B4,C5:D8” ).select,运行效果如下
如果没有中间的逗号,那将代表多个区域的相交区域,比如: range( “A1:B4 B4:C7” ).select
cells还可以作为单个元素使用,如cells(1),代表第一个单元格,也就是A1单元格,cells(2)代表第二个单元格,也就是B1单元格。简称就是从左到右,从上到下依次排布下去。
cells还可以作为ranges的方法。比如range(“A2:B3”).cells(1,1)代表选中区域的第一行第一列元素,也就是A2单元格,比如 range(“A2:B3”).cells(1,1) .select
同理,因为cells可以单个元素使用,所以 range(“A2:B3”).cells(1,1) 和 range(“A2:B3”).cells(1) 其实是一样的,两者的区别就是一个是2×2矩阵,一个是4个数字构成的数组。
二、引用行和引用列
在vba中,行用rows表示,列用columns表示
若要引用第三行,可以rows(“3:3”).select,或者 rows(3).select
若要引用第三到第五行,可以使用 rows(“3:5”).select
同样的,若要引用第三列,可以使用columns(3).select,或者 columns (“C:C”).select 注意,列是用字母表示的,如果要是用双引号表示列,记得用字母而不是数字。
若要引用第三到第五列,可以使用 columns (“C:E”).select
类似range的cells,rows和columns也可以作为他们自身的对象
比如 rows(“2:3”).row(1).select 代表从第二列开始的第一列,也就是选中第二列
比如columns (“C:E”).columns(2).select代表从C列开始的下一列,也就是第D列,或者说第四列。
三、range的其它属性
在上文我给大家简单的将了一下range的value属性,也就是单元格里面的值。除了value属性外,还有下面几个比较常用的range属性
1.offset
offset,是一个偏移函数,它offset(1,2)代表向下走一格,向右走两个格。
比如range(“A1”).offset(1,2).select (若为负数,则方向相反)
2.resise
resize就是重新定义尺寸大小,可以用来扩大或者缩小选定区域。
比如range("A1").resize(1,2).select
它会以A1单元格为基点,然后选中一行,两列的重叠位置。
若选定起始区域为合并单元格或者为一个表格区域,则以左上角的单元格为准
比如:range(“A1:B3”).resize(1,2).select
效果和上面是一样的
3.CurrentRegion
CurrentRegion,英文翻译过来就是当前使用区域,利用这个属性,可以选择表格中当前已经使用过的区域。
比如range(“A2”).CurrentRegion.select
咦?为啥没选中右边的数据呢?原因是因为,CurrentRegion只能识别连续的非空单元格,如果有空单元格,他就不会选中了。
那又有小伙伴会问了,为啥会选中第一列呢,不也是空的嘛?
这个是因为CurrentRegion是从A1单元格为起点,然后根据我输入的A2单元格的最下面的非空单元格,也就是C6单元格,构成的新区域。
那要是我想把整个工作表的使用单元格都选中呢?
我们可以使用Activesheet的usedrange属性
Activesheet,也就是活动工作表,注意,没有s,因为活动工作表只有一张。选中哪个就是哪个。
usedrange,故名思意,就是已使用的单元格。
比如:Activesheet.usedrange.select
这样,他就会把已使用的行和列构成一个新区域。
注意,如果我在A10单元格,动了它的格式,比如把常规改成数值,运行上面那段代码也会选中它。因为我也使用了A10单元格,改了它的格式,只不过没有往里面填数字而已。
4.End
End属性是一个经常用的属性,它和CurrentRegion有点类似,是用来探测当前选中单元格周边区域边界的,它的区域起始点也是A1单元格
比如:range("B2").End(xlup).select '选中上边界,边缘为B1单元格
比如:range("B2").End(xldown).select '选中下边界 ,边缘为B5单元格
比如:range("B2").End(xlToleft).select '选中左边界 ,边缘为A2单元格
比如:range("B2").End(xlToright).select '选中右边界 ,边缘为C2单元格
若我们选中的是空单元格,其End的属性将返回最后一个空单元格边缘的非空单元格。(只有非空单元格和边线单元格可以作为边缘)
比如我们知道Excel工作表共有65536行,如果我们想在“刘三”下面填入“王五”
我们有两个方法,一是选中B2单元格,找到它的下边缘,然后向下偏移一个单元格
range("B2").End(xlDown).Offset(1,0).value="王五"
也可以选中B65536单元格,找到它的上边缘(同样它的边缘是B5),然后向下偏移一个
range("B65563").End(xlUp).Offset(1,0).value="王五"
5.count
除了使用end探测边缘,常用的还有count属性。
count可以计算单元格个数
比如 MsgBox (Range("A1:B20").Count) ‘答案是40
也可以用来计算行,列数量
Activesheet.UsedRange.Rows.count ’统计活动单元格已使用的行数
Activesheet.UsedRange.Columns.count ’统计活动单元格已使用的列数
四、range的常用方法
range的方法我们已经知道了select方法,也就是选中,出了select,还有下面几种方法
1.active
active和slect几乎没有区别,active还有激活的意思,所以也可以用来激活工作簿,工作表
2.copy
这个意思很简单,就是复制的意思。比如range(“A1”).copy
3.cut
这个就是传说中的剪切了
4.delete
删除,一般要选择默认移动位置,默认是往左移动
如果我们要指定移动位置,可以通过shift:=xlup往上移动
比如range(“A1”).delete shift:=xlup ’删除A1单元格,其它往上移动
range(“A1”).delete shift:=xlToleft ’删除A1单元格,其它往左移动
5.paste
paste就是粘贴了,一般和剪切,复制连着用。
复制——》选中——》粘贴
比如,复制A1单元格,选中A2,粘贴
Range("A1").Copy
Range("A2").Select
ActiveSheet.Paste '选中的区域粘贴进去
其实也可以直接省略选中这个,直接copy后粘贴,
Range("A1").Copy Range("A2") '直接粘贴的方法
6.clear
这个也用的比较多,用于清除格式
比如:
range("A1").clear ’用于清除A1单元格的所有格式、批注、内容等
range("A1").clearComments ’用于清除A1单元格的批注
range("A1").clearContents ’用于清除A1单元格的内容
range("A1").clearForamats '用于清除A1单元格的格式
基本range的内容都在这里了,内容较多,大家好好练习,我们下节再见。