excel raise与offset

来源:互联网 发布:ug8.0编程视频教程全集 编辑:程序博客网 时间:2024/04/19 08:06

一、Resize和Offset属性介绍


首先声明,这里讨论的Resize属性和Offset属性都是属于Range对象的,通过以下格式进行引用:
Range.Offset(RowOffset, ColumnOffset)
Range.Resize(RowSize, ColumnSize)

Range.Offset(RowOffset, ColumnOffset)
单元格区域.偏移(行偏移量,列偏移量)
大概解释一下:指定的单元格区域,根据行偏移量和列偏移量进行整体平移,得到同样大小的单元格区域,但是地址可能发生了变化;
行偏移量,列偏移量的取值范围:负整数、零、正整数
行偏移量,列偏移量的默认值:零

Range.Resize(RowSize, ColumnSize)
单元格区域.重新确定区域(行数,列数)
大概解释一下:以指定单元格区域的左上角单元格为起点,根据行数和列数向右下方进行扩展,得到一个新的单元格区域,区域大小和地址都可能发生了变化。
行数、列数的取值范围:正整数
行数列数的默认值:指定单元格区域的当前行数、指定单元格区域的当前列数。(这个概念很重要)



二、Offset属性使用示例



Offset使用示例1:单个单元格情况
(1)行偏移量正整数:向下移;列偏移量正整数:向右移。
Range(“B2”).offset(1,1)
单元格向下移1行,向右移1列,得到单元格C3
(2)行偏移量负整数:向上移;列偏移量负整数:向左移。
Range(“B2”).offset(-1,-1)
单元格向上移1行,向左移1列,得到单元格A1
(3)行偏移量、列偏移量为零:原地踏步
Range(“B2”).offset(0,0)
单元格行列均不变化,得到单元格B2
Range(“B2”).offset(0,1)
单元格行无偏移、向右移1列,得到单元格C2
Range(“B2”).offset(1,0)
单元格向下移1行,列无偏移,得到单元B3
(4)行偏移量,列偏移量省略:默认零值
下面这几种情况是结果是一样的
行偏移量、列偏移量参数都省略:Range(“B2”).offset()
列偏移量参数省略:Range(“B2”).offset(0)
行偏移量参数省略:Range(“B2”).offset(,0)
这三种情况和Range(“B2”).offset(0,0)的结果是一样的,都是单元格行列均不变化,得到单元格B2。


Offset使用示例2:多个单元格情况
(1)Range("B2:C3").Offset(1, 1)
单元格”B2:C3”区域整体向下移1行,向右移1列,得到单元格区域”C3:D4”
(2)Range("B2:C3").Offset(-1, -1)
单元格”B2:C3”区域整体向上移1行,向左移1列,得到单元格区域”A1:B2”
(3)Range("B2:C3").Offset(0, 0)
单元格”B2:C3”区域整体原地踏步,得到单元格区域”B2:C3”
(4)Range("B2:C3").Offset(1, 0)
单元格”B2:C3”区域整体向下移1行,列无偏移,得到单元格区域”B3:C4”
(5)Range("B2:C3").Offset(0, 1)
单元格”B2:C3”区域整体行无偏移,向左移1列,得到单元格区域”C2:D3”
(6)以下省略参数情况等价与Range("B2:C3").Offset(0, 0)
Range("B2:C3").Offset(),Range("B2:C3").Offset(, 0), Range("B2:C3").Offset(0)


Offset使用示例3:整列情况
(1)Range("B2").EntireColumn.Offset(0, 1)
单元格区域”B列”整体右移1列,得到单元格”C列”
(2)Range("B2").EntireColumn.Offset(0, -1)
单元格区域”B列”整体右移1列,得到单元格”A列”
(3)以上两个例子可以采用省略写法
Range("B2").EntireColumn.Offset(, -1)
(4)注意下面这写法是错误的
Range("B2").EntireColumn.Offset(1, 1)
Range("B2").EntireColumn.Offset(-1, 1)
当单元格区域是整列时,行偏移量只能是0,或者省略,不能是正整数或负整数,切记


Offset使用示例4:整行情况
整行行情况与整列情况相似,我仅给出正确写法与错误写法,详细代码可以看附件
正确写法:
Range("B2").EntireRow.Offset(1, 0)
Range("B2").EntireRow.Offset(-1, 0)
Range("B2").EntireRow.Offset(1)
错误写法:
Range("B2").EntireRow.Offset(1, 1)
Range("B2").EntireRow.Offset(-1, 1)
当单元格区域是整行时,列偏移量只能是0,或者省略,不能是正整数或负整数,切记

三、Resize属性使用示例


Resize使用示例
(1)但单元格和多单元格使用Resize属性
一般情况下,Resize属性不存在单单元格与多单元格的区别,无论区域大小,总是以单元格区域的左上角单元格为起点,根据行数和列数向右下方进行扩展,得到一个新的单元格区域;
Range("A1").Resize(1, 1)
Range("A1:B2").Resize(1, 1)
这两条语句效果是一样的,都以从”A1”单元格为开始(包含A1单元格),扩展1行,扩展1列,结果得到单元格区域都是A1


Range("A1").Resize(2, 2)
Range("A1:B2").Resize(2,2)
同样,这两条语句效果也是一样的,从”A1”单元格为开始(包含A1单元格),扩展2行,扩展2列,结果得到单元格区域都是A1:B2


(2)Resize参数省略的情况
当Resize内容参数省略的时候,单单元格与多单元格就出现了区别,当参数省略的时候,行数为当前单元格区域行数,列数为当前单元格区域列数,我个人感觉这个非常灵活,所以我经常出错;


Range("A1").Resize()
在上面这个语句中,单元格区域是A1,行数是1,列数是1,因为参数进行了省略,采用了默认值,那就是从”A1”单元格为开始(包含A1单元格),扩展1行,扩展1列,结果得到单元格区域是A1
其实把上面这条语句写完全,就是这样的Range("A1").Resize(1,1)


Range("A1:B2").Resize()
我们继续来分析这条语句,单元格区域是"A1:B2",是由两行两列组成的单元格,那么行数是2,列数是2,因为参数进行了省略,采用了默认值,那就是从”A1”单元格为开始(包含A1单元格),扩展2行,扩展2列,结果得到单元格区域是"A1:B2";
把这条语句写全,应该是Range("A1:B2").Resize(2,2)

(3)整列的情况
Range("A1").EntireColumn.Resize(, 3)
我们来分析上面的语句,单元格区域是”A列”,行数省略,代表了所有行,列数是3,那就是从”A1”单元格为开始(包含A1单元格),扩展所有行,扩展3列,结果得到单元格区域是"A:C";
注意,整列情况不能写行数,否则就无法扩展整列啦,切记;


(4)整行的情况
Range("A1").EntireRow.Resize(3)
我们来分析上面的语句,单元格区域是”第1行”,行数是3,列数省略,代表了所有列,就是从”A1”单元格为开始(包含A1单元格),扩展3行,扩展所有列,结果得到单元格区域是"1:3";
注意,整列情况不能写行数,否则就无法扩展整列啦,切记;


(5)错误的写法
Range("A1").Resize(0, 1)
Range("A1").Resize(-1, 1)
行数和列数都不能出项零值和负值,以上语句必然报错

原创粉丝点击