到达想要的单元格——Offset属性

在详细介绍本的内容前,我们先轻松一下 。
据说,在我家的院子里藏着很多金银珠宝 。你一定想知道藏在哪儿吧,告诉你,就在院子里的一棵树下 。当你兴冲冲地跑到院子里准备挖宝藏时,傻眼了,因为我家院子太大,几乎种了上百棵树,究竟在哪棵树下呢?珠宝的诱惑力太强了,你决定挨个树找,够你找的了……但是,如果我告诉你,在我家院子里有一棵老槐树,从这棵槐树起向右第3棵树下藏着很多金银珠宝,你一下子就能找到了 。
很多情况下,我们会采用相对位置或坐标来描述事物的位置 。因为这样的描述让人容易理解,从而方便快速找到想要的东西 。
言归正传 。Offset属性是Range对象的一个很有用的属性,它能够帮助我们指定相对于某个单元格的其它单元格 。这样,我们就能够很方便地以某一个特定的单元格为起点,遍历其它单元格,或者到达我们想要的单元格 。
简而言之,Offset属性能够帮助我们从工作表中的一个单元格移动到另一个单元格 。
Offset属性的语法表达为:
Range对象.Offset(RowOffset,ColumnOffset)
返回基于起点单元格偏移指定的行数和列数后的单元格 。

到达想要的单元格——Offset属性

文章插图
说明:
Range对象为指定的起始单元格 。(也就是上面所说的老槐树)
括号里的参数均为可选项 。
其中,参数RowOffset代表行偏移数,可以是正数、负数或0,正数表示向下偏移的行数,负数表示向上偏移的行数,0表示与起始单元格在同一行;当没有指定该参数值时,默认值为0 。
同样,参数ColumnOffset代表列偏移数,可以是正数、负数或0,正数表示向右偏移的列数,负数表示向左偏移的列数,0表示与起始单元格在同一列;当没有指定该参数值时,默认值为0 。
如果偏移的行列数超出了Excel工作表单元格的范围,则会导致错误 。例如,以单元格A1为起点,向上偏移1行,则会出错 。
如下图所示,假设我们要选取以单元格B2为起点单元格,向下偏移1行、向右偏移2列的单元格,则运行代码:
Range(“B2”).Offset(1,2).Select
返回并选取单元格D3(即Range(“B2”).Offset(1, 2)返回单元格D3,Select方法选取返回的单元格D3) 。
到达想要的单元格——Offset属性

文章插图
再列举一些简单的代码:
Range(“B2”).Offset(1)
返回单元格B3(省略了列偏移量参数ColumnOffset,返回的单元格与起始单元格在同一列) 。
Range(“B2”).Offset(,2)
返回单元格D2(省略了行偏移量参数RowOffset,返回的单元格与起始单元格在同一行) 。
举一个极端的例子,下面的代码:
Range(“B2”).Offset
仍返回单元格B2,也就是说,使用不指定参数的Offset属性是多此一举 。
当然,代码中也可以加上参数名称,使代码的可读性更强 。例如上面的代码也可以写为:
Range(“B2”).Offset(RowOffset:=1, ColumnOffset:=2).Select
Range(“B2”).Offset(RowOffset:=1)
Range(“B2”).Offset(ColumnOffset:=2)
注意,加上参数名称后,就不需要按参数顺序指定参数值了,所以省略前面的参数值而仅指定后面的参数值时,也不需要加上分隔的逗号了(见最后一句代码) 。
Offset属性能够用在单元格区域中,偏移整个单元格区域 。例如,下面的代码:
Range(“A1:B2”).Offset(2,2).Select
返回并选取单元格区域C3:D4,如下图所示 。
到达想要的单元格——Offset属性

推荐阅读