手机版

到达所需的单元格——Offset属性

时间:2021-09-17 来源:互联网 编辑:宝哥软件园 浏览:

在详细介绍这本书之前,我们先放松一下。

据说我的院子里藏着许多金银珠宝。你一定想知道它在哪里。我告诉你,它在院子里的一棵树下。当你冲到院子里挖宝藏时,你傻眼了,因为我的院子太大了,几乎种了几百棵树。哪棵树下?珠宝的诱惑力太强了。你决定从一棵树到另一棵树寻找它,这对你来说已经足够了.但是,如果我告诉你,我家院子里有一棵老槐树,从这棵槐树向右第三棵树下藏着许多金银珠宝,你马上就能找到。

在很多情况下,我们会用相对位置或坐标来描述事物的位置。因为这个描述很容易理解,所以方便快捷的找到你想要的。

言归正传。Offset属性是Range对象非常有用的属性,可以帮助我们指定相对于某个单元格的其他单元格。这样,我们可以很容易地从一个特定的单元格开始,遍历其他单元格,或者到达我们想要的单元格。

简而言之,Offset属性可以帮助我们在工作表中从一个单元格移动到另一个单元格。

“偏移”属性的语法是:

范围对象。偏移量(行偏移量、列偏移量)。

根据起始单元格返回指定行数和列数的单元格偏移量。

描述:

范围对象是指定的起始单元格。(也就是上面提到的老槐树)

括号中的参数是可选的。

参数“行偏移量”表示行偏移量的数量,可以是正数、负数或0。正数表示向下偏移的行数,负数表示向上偏移的行数,0表示与起始单元格相同的行。未指定参数值时,默认值为0。

同样,参数ColumnOffset表示列偏移量的数量,可以是正数、负数或0。正数表示向右偏移的列数,负数表示向左偏移的列数,0表示与起始单元格相同的列。未指定参数值时,默认值为0。

如果行和列的偏移量超出了Excel工作表单元格的范围,将导致错误。例如,如果从单元格A1开始向上移动1行,您将得到一个错误。

如下图所示,假设我们要选择以单元格B2为起点的单元格,以及一行向下两列向右的单元格,然后运行代码:

范围(“B2”)。偏移量(1,2)。挑选

并返回并选择单元格D3(即范围(“B2”)。offset (1,2)返回单元格D3,select方法选择返回的单元格D3)。

列出一些简单的代码:

范围(“B2”)。偏移量(1)

返回单元格B3(省略了ColumnOffset参数columnoffset,返回的单元格与起始单元格位于同一列)。

范围(“B2”)。偏移量(,2)

返回单元格D2(省略了行偏移量参数行偏移量,返回的单元格与起始单元格在同一行)。

举一个极端的例子,下面的代码:

范围(“B2”)。抵消

仍然返回单元B2,即使用偏移属性而不指定参数是多余的。

当然,参数名也可以添加到代码中,使代码更易读。例如,上面的代码也可以写成:

范围(“B2”)。偏移量(行偏移量:=1,列偏移量:=2)。挑选

范围(“B2”)。偏移量(RowOffset:=1)

范围(“B2”)。偏移量(列偏移量:=2)

请注意,添加参数名称后,不需要根据参数顺序指定参数值,因此在省略前面的参数值,只指定后面的参数值时,不需要添加逗号分隔(参见最后一段代码)。

“偏移”属性可用于单元格区域,以偏移整个单元格区域。例如,以下代码:

范围(“A1:B2”)。偏移量(2,2)。挑选

并返回选择单元格区域C3:D4,如下图所示。

您可以使用“偏移”属性在循环中移动单元格,以便遍历单元格区域来查找满足条件的单元格。工作表如下图所示:

现在,在小区A2:A7找一个叫“刘钊”的同学,把他的分数加粗。代码如下:

Sub OffsetExa1()

' Dimrng asrange '声明了一个单元格对象变量。

' Dimrng total as range '声明了一个单元格对象变量。

设置RNG总计=范围(“a2:a7”)。将单元格范围分配给单元格对象变量。

设置RNG=范围(“a2”)。将单元格分配给单元格对象变量。

遍历单元格区域。

直到rng。Value=" "

如果rng。Value=“刘钊”然后‘如果单元格值为刘钊,则其分数将为粗体。

Rng。Offset (0,1) .font.bold=true '使用Offset属性偏移到小数单元格。

如果…就会结束

设定RNG=RNG。offset (1,0)'将下一个单元格分配给单元格对象变量。

末端接头

在本例中,循环位于固定的单元格区域,因此For Each结构也可用于优化代码。“对于每个”结构负责循环,而“偏移”属性负责到相应单元格的偏移。代码如下:

子偏移xa2()

' Dimrng asrange '声明了一个单元格对象变量。

' Dimrng total as range '声明了一个单元格对象变量。

设置RNG总计=范围(“a2:a7”)。将单元格范围分配给单元格对象变量。

遍历单元格区域。

总的来说

如果rng。Value=“刘钊”那么‘如果单元格值为刘钊,则其分值为粗体。

Rng。偏移量(0,1)。font.bold=true '使用offset属性偏移到小数单元格。

如果…就会结束

然后

末端接头

在很多程序中,往往需要先找到一个满足一定条件的单元格,然后基于该单元格操作其他单元格。

接下来,我们使用Offset属性来优化《Excel VBA解读(19):员工管理系统开发V1.0》中的系统,使代码更加灵活。代码如下:

Sub TotalData1()

声明工作表变量。

将工作区信息作为工作表变暗

将工作周调整为工作表

声明一个单元格对象变量。

调光范围

给wksInfo变量赋值。

设置wksinfo=this workbook . worksheets(“员工信息数据库”)。

设置wks bayinfo=this workbook . worksheets(“员工基本信息表”)。

将初始单元格分配给变量。

设置rng=wksInfo。范围(“A2”)

自动将员工基本信息表中的数据填入员工信息数据库工作表中。

有了wksBaseInfo

rng。值=范围(“B2”)。价值

rng。偏移量(0,1)。值=。范围(“F2”)。价值

rng。偏移量(0,2)。值=。范围(“B3”)。价值

rng。偏移量(0,3)。值=。范围(“D3”)。价值

rng。偏移量(0,4)。值=。范围(“F3”)。价值

rng。偏移量(0,5)。值=。范围(“B4”)。价值

rng。偏移量(0,6)。值=。范围(“D4”)。价值

rng。偏移量(0,7)。值=。范围(“F4”)。价值

rng。偏移量(0,8)。值=。范围(“B5”)。价值

rng。偏移量(0,9)。值=。范围(“F5”)。价值

rng。偏移量(0,10)。值=。范围(“B6”)。价值

rng。偏移量(0,11)。值=。范围(“D6”)。价值

rng。偏移量(0,12)。值=。范围(“F6”)。价值

rng。偏移量(0,13)。值=。范围(“B7”)。价值

rng。偏移量(0,14)。值=。范围(“F7”)。价值

rng。偏移量(0,15)。值=。范围(“B8”)。价值

rng。偏移量(0,16)。值=。范围(“D8”)。价值

rng。偏移量(0,17)。值=。范围(“F8”)。价值

rng。偏移量(0,18)。值=。范围(“B9”)。价值

rng。偏移量(0,19)。值=。范围(“D9”)。价值

rng。偏移量(0,20)。值=。范围(“F9”)。价值

rng。偏移量(0,21)。值=。范围(“B10”)。价值

rng。偏移量(0,22)。值=。范围(“B11”)。价值

rng。偏移量(0,23)。值=。范围(“B12”)。价值

以…结尾

末端接头

这样就防止了员工信息数据库中的单元格采用“硬编码”(即在代码中使用固定的单元格对象)。“硬编码”码的使用使得以后修改码时需要逐个修改对应的小区码,比较复杂,容易出错。对于经常更改的单元格,最好使用对象变量,例如示例中的“员工信息数据库”工作表。填充数据时,单元格经常会发生变化。对于不可更改的单元格,可以使用固定单元格,例如示例中“员工基本信息表”中的单元格F2、B3和D3)。

优化后的代码只需要在以后需要扩展代码时修改起始单元格,更加灵活。

版权声明:到达所需的单元格——Offset属性是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。