到达想要的单元格——Offset属性
发布时间:2022-09-04 01:07:19
在详细介绍本的内容前,我们先轻松一下。
据说,在我家的院子里藏着很多金银珠宝。你一定想知道藏在哪儿吧,告诉你,就在院子里的一棵树下。当你兴冲冲地跑到院子里准备挖宝藏时,傻眼了,因为我家院子太大,几乎种了上百棵树,究竟在哪棵树下呢?珠宝的诱惑力太强了,你决定挨个树找,够你找的了……但是,如果我告诉你,在我家院子里有一棵老槐树,从这棵槐树起向右第3棵树下藏着很多金银珠宝,你一下子就能找到了。
很多情况下,我们会采用相对位置或坐标来描述事物的位置。因为这样的描述让人容易理解,从而方便快速找到想要的东西。
言归正传。Offset属性是Range对象的一个很有用的属性,它能够帮助我们指定相对于某个单元格的其它单元格。这样,我们就能够很方便地以某一个特定的单元格为起点,遍历其它单元格,或者到达我们想要的单元格。
简而言之,Offset属性能够帮助我们从工作表中的一个单元格移动到另一个单元格。
Offset属性的语法表达为:
Range对象.Offset(RowOffset,ColumnOffset)
返回基于起点单元格偏移指定的行数和列数后的单元格。
说明:
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)。
再列举一些简单的代码:
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属性来移动单元格,从而遍历单元格区域来查找满足条件的单元格。如下图所示的工作表:
现在要在单元格区域A2:A7中查找姓名为“赵六”的同学,并将他的分数加粗。代码如下:
Sub OffsetExa1()
Dim rng As Range ‘声明单元格对象变量
Dim rngTotal As Range ‘声明单元格对象变量
Set rngTotal = Range(“A2:A7”) ‘将单元格区域赋值给单元格对象变量
Set rng = Range(“A2”) ‘将单元格赋值对单元格对象变量
‘遍历单元格区域
Do Until rng.Value = “”
If rng.Value = “赵六” Then ‘如果单元格值为赵六,则将其分数加粗
rng.Offset(0, 1).Font.Bold = True ‘使用Offset属性偏移到分数单元格
End If
Set rng = rng.Offset(1, 0) ‘将下一个单元格赋值给单元格对象变量
Loop
End Sub
由于本例中是在固定的单元格区域内循环,所以还可使用For Each结构来优化代码,For Each结构负责循环,Offset属性负责偏移到相应的单元格。代码如下:
Sub OffsetExa2()
Dim rng As Range ‘声明单元格对象变量
Dim rngTotal As Range ‘声明单元格对象变量
Set rngTotal = Range(“A2:A7”) ‘将单元格区域赋值给单元格对象变量
‘遍历单元格区域
For Each rng In rngTotal
If rng.Value = “赵六” Then’如果单元格值为赵六,则将其分数加粗
rng.Offset(0, 1).Font.Bold = True ‘使用Offset属性偏移到分数单元格
End If
Next
End Sub
在很多程序中,经常需要先查找满足特定条件的单元格,然后以该单元格为基准,对其他单元格进行操作。
下面,我们使用Offset属性对《Excel VBA解读(19):员工管理系统开发V1.0》中的系统进行优化,使代码更加灵活。代码如下:
Sub TotalData1()
‘声明Worksheet变量
Dim wksInfo As Worksheet
Dim wksBaseInfo As Worksheet
‘声明单元格对象变量
Dim rng As Range
‘给wksInfo变量赋值
Set wksInfo =ThisWorkbook.Worksheets(“员工信息数据库”)
Set wksBaseInfo =ThisWorkbook.Worksheets(“员工基本信息表”)
‘将初始单元格赋值给变量
Set rng = wksInfo.Range(“A2”)
‘将
With wksBaseInfo
rng.Value = Range(“B2”).Value
rng.Offset(0, 1).Value =.Range(“F2”).Value
rng.Offset(0, 2).Value =.Range(“B3”).Value
rng.Offset(0, 3).Value =.Range(“D3”).Value
rng.Offset(0, 4).Value = .Range(“F3”).Value
rng.Offset(0, 5).Value =.Range(“B4”).Value
rng.Offset(0, 6).Value =.Range(“D4”).Value
rng.Offset(0, 7).Value =.Range(“F4”).Value
rng.Offset(0, 8).Value =.Range(“B5”).Value
rng.Offset(0, 9).Value =.Range(“F5”).Value
rng.Offset(0, 10).Value =.Range(“B6”).Value
rng.Offset(0, 11).Value =.Range(“D6”).Value
rng.Offset(0, 12).Value =.Range(“F6”).Value
rng.Offset(0, 13).Value = .Range(“B7”).Value
rng.Offset(0, 14).Value =.Range(“F7”).Value
rng.Offset(0, 15).Value =.Range(“B8”).Value
rng.Offset(0, 16).Value =.Range(“D8”).Value
rng.Offset(0, 17).Value =.Range(“F8”).Value
rng.Offset(0, 18).Value =.Range(“B9”).Value
rng.Offset(0, 19).Value =.Range(“D9”).Value
rng.Offset(0, 20).Value =.Range(“F9”).Value
rng.Offset(0, 21).Value =.Range(“B10”).Value
rng.Offset(0, 22).Value =.Range(“B11”).Value
rng.Offset(0, 23).Value =.Range(“B12”).Value
End With
End Sub
这样,避免了“员工信息数据库”中的单元格采用“硬编码”(即在代码中使用固定的单元格对象。使用“硬编码”的代码使得以后要修改代码时,需要逐个修改相应的单元格代码,很繁锁,也容易出错。对于经常变换的单元格,最好使用对象变量,例如例子中“员工信息数据库”工作表,在填充数据时,单元格经常要变动。而对于不会变化的单元格,可以使用固定的单元格,如例子中“员工基本信息表”中的单元格F2、B3、D3等)。
上述优化后的代码,使今后代码需要扩展时,只需修改起始单元格即可,更加灵活。


猜你喜欢
- 日常的办公当中,我们为了增强PowerPoint演示文稿的安全性,可以对已完成的演示文稿进行设置密码,也可以对已经设置密码的演示文档进行更改
- 有用户在使用MuMu模拟器的过程中,由于没有开启VT,使得游戏运行不是很流畅,对此下面小编将以技嘉主板为例,为大家带来技嘉(GIGABYTE
- Excel工资条制作的方法很多,包含Excel操作技巧、数据透视表、录制宏、VBA代码、使用函数,以及结合Word邮件合并制作工资条。本篇我
- 用户在wps软件中可以完成很多不同类型文件的编辑工作,因此wps软件给用户带来了许多的帮助和便利,wps软件也逐渐成为了用户的首选办公软件,
- 笔记本电脑重新安装系统的教程,用户在使用电脑时可能会遇到各种严重的系统问题,比如死机故障或者系统崩溃等无法解决的情况,那么就需要通过重装系统
- 各人好, 咱们在 操纵WPS表格和Excel表格 停止 一样平常办公时, 常常 需求 使用到 乞降 功用,表格的单行单列 乞降 信赖 咱们
- dla.exe是Sonic的CD/DVD刻录软件相关程序进程文件: dla or dla.exe 进程名称: Drive Letter Ac
- 你知道吗?AI有很多的实用小技巧,能帮助你快速创建自己想要的图形,今天Macdown小编给大家带来AI的实用小技巧之制作旋转的小球,感兴趣的
- 你的Mac字体集看起来有点杂乱吗?是否难以找到最常用的字体?准备好删除所有非标准字体并重新开始吗?如果是这样,一个简单的技巧可以帮助您快速清
- 使用Excel进行报表处理的时候,在运算的过程中,程序出现错误提示“#NUM”。 导致这种错误提示的原因并不唯一,
- 今天是解决这个问题的时候咯,来吧,具体操作步骤如下显示咯!①首先在单元格输入内容,选中单元格右击,插入批注。 ②然
- 强制关机对电脑的危害多大?大多数用户强制关机,都是因为遭遇系统宕机卡死等问题,才会这么做,当然这也是没有办法的,虽然明知道电脑强制关机伤硬盘
- 制作PPT时,经常需要加入一些元素使得PPT更加吸引人,其中给PPT加入背景音乐是常用的方法之一,本文以WPS演示为例,简单介绍WPS演示中
- 在Word长文档中,比如说长达上百页的专业论文或者其他文件,要直接跳转到自己想要查看的那一页如果只用鼠标拉然后用眼睛看显然是不现实的,但使用
- 要筛选出某列包含空单元格的记录,可以使用自动筛选:如在Excel 2003中单击筛选下拉箭头,选择“空白”即可。但当数据区域的多
- 一年一度的中考报名已经开始了,招生办小牛又在为汇总全县中考报名情况而忙碌着,一会儿“筛选”,一会儿“排序”,弄得满头大汗,两眼发直。看到他这
- 在excel表格中,我们统计数据有更方便的方法,那便是添加下拉菜单,可以减少一些不必要的行列,这样内容整体看上去更简洁、清晰,应该很多朋友都
- Win7系统提示系统找不到指定文件怎么办?驱动程序在安装过程中,大部分是需要Windows 本身一些系统文件来调用的。在Win7 32/64
- 这篇文章主要介绍了win10系统如何给磁盘分区?win10系统安装分区操作教程的相关资料,需要的朋友可以参考下本文详细内容。我们在重装win
- YY怎么删除频道管理员?YY相信大家都很熟悉了,它是一款通讯软件,我们在使用歪歪语音时,会给频道加管理员,时间久了,有些管理员就没用了,然而