OFFSET和RESIZE 是单元格常用的属性。简单释义:Range(X).OFFSET用于代指与Range(X)有着“相对距离”的单元格;Range(X).RESIZE 用于代指涵盖Range(X),有着相对距离的单元格区域。OFFSET返回的是单个单元格,RESIZE返回的是单元格区域(通常用法)。
OFFSET语法:Range(“A1”).Offset(参数1:行数,参数2:列数);参数1,参数2都须是数值型(不支持工作表的列序号“A、B”这种)。参数1 表示相对[A1]偏移多少行,参数2 表示相对[A1]偏移多少列。
如:range(“A1”).Offset(0,0)就是[A1]本身,range(“A1”).Offset(1,0)是[A2](也简写成range(“A1”).Offset(1),只能省略“参数2”);range(“A1”).Offset(1,1) 是[B2]。
如图示例参数是可以为负数;行方向相对参照单元格向上偏移,“行数”为负数,向下偏移,行数为正数;列方向相对参照单元格向左偏移,“列数”为负数,向右偏移,“列数”为正数。
OFFSET返回的是一个单元格对象,把Range.Offset看作某个单元格,它就可以使用单元格的任何属性。示例中Range("a1").Offset(n, n) 就是指 [D4],再Offset(-2,-2),[D4]的行,列减2,就得到[B2]。
OFFSET还有一种语法是掉Offset的写法:range(“A1”)(偏移行数,偏移列数),但是这个行数、列数从1起始。举例:Range(“A1”)(1,1) 是指自己,range(“A1”)(2,1)是 [A2]。不过很少见到这种写法,不推荐这么写。
Offset前面要是单元格区域,会是什么效果呢?
相当于整个区域进行偏移行数、列数,区域大小、形状不变。
RESIZE语法:Range(“A1”).RESIZE(行数,列数),行数,列数这2个参数都是从1开始,且不能小于1。Range(X).RESIZE(x,y)释义:包含单元格X在内,且以X为顶点的x行,y列大小的矩形区域。
单元格区域.Resize 是怎样的效果?是从区域的最左上单元格开始,扩展行、列的区域。
Range("a1:b2").Resize(2, 2) 等于Range("a1").Resize(2, 2),所以Range("a1:b2") 与Range("a1:b2").Resize(2, 2) 是一样的区域。同Offset的参数不一样的地方。
大多数情况Offset与Resize 都是结合使用,如同之前文章中的应用。
附:Next、Previous 属性。Range(X).Next 等于 Range(X).offset(0,1),X单元格右边的单元格 ;Range(X).Previous 等于 Range(X).offset(0,-1), X单元格右边的单元格。