从0学Excel VBA编程 第5篇:Range对象基础操作——选中单元格和区域
每天10分钟,从今天开始,你将真正"指挥"Excel操作指定单元格和区域。
学习目标
- 认识
Range 对象和 Cells 对象,理解它们的区别和用法
知识点精讲
什么是 Range 对象?
在 Excel 里,你每天操作的每一个格子就是一个"单元格"。在 VBA 中,单元格被叫做 Range 对象。
简单说:Range 对象就是 Excel 里的格子(或一片格子)在 VBA 中的"代号"。
你可以把它想象成一个遥控器——你用代码按一下 Range,Excel 就帮你选中、读取或修改对应的格子。
用 Range 选中单元格
最常见的写法:
Range("A1").Select ' 选中 A1 单元格Range("A1:B5").Select ' 选中 A1 到 B5 的整片区域Range("A1,B3,C5").Select ' 选中 A1、B3、C5 三个不连续的格子
"A1,B3,C5" —— 不连续的多个格子,中间用逗号 ,
用 Cells 选中单元格
Cells 是另一种选中格子的方式,它用数字来表示位置:
Cells(1, 1).Select ' 选中第1行第1列,也就是 A1Cells(3, 2).Select ' 选中第3行第2列,也就是 B3
Cells(行号, 列号) —— 第一个数字是行,第二个数字是列。
Range 和 Cells 的区别
经验法则:地址固定不变时用 Range,需要用变量计算行号列号时用 Cells。
选中整行和整列
Rows(3).Select ' 选中第3整行Columns(2).Select ' 选中第2整列(即 B 列)
获取单元格的信息
选中格子后,你还可以用代码"读取"它的信息:
Dim 地址 As StringDim 行号 As LongDim 列号 As Long地址 = Range("A1").Address ' 返回 "$A$1"行号 = Range("A1").Row ' 返回 1列号 = Range("A1").Column ' 返回 1
.Address:返回单元格的地址(带 $ 符号)
【SVG 示意图】
实战案例
案例1:选中并报告单元格地址(简单)
功能说明:用代码选中 B3 单元格,然后弹窗显示它的地址、行号和列号。
操作步骤:
- 点击"插入" → "模块"(如果已有模块可直接用)
' =================================' 案例1:选中并报告单元格信息' =================================Sub 选中并报告() Dim 地址 As String Dim 行号 As Long Dim 列号 As Long ' 选中 B3 单元格 Range("B3").Select ' 获取 B3 的信息 地址 = Range("B3").Address 行号 = Range("B3").Row 列号 = Range("B3").Column ' 弹窗显示 MsgBox "地址:" & 地址 & vbCrLf & _ "行号:" & 行号 & vbCrLf & _ "列号:" & 列号, vbInformation, "单元格信息"End Sub
结果:Excel 自动选中 B3 单元格,同时弹出一个窗口,显示地址 $B$3、行号 3、列号 2。
代码讲解:
Range("B3").Select:让 Excel 选中 B3 格子.Address 返回的地址带 $ 符号(如 $B$3),这是 Excel 的"绝对地址"写法,暂时不用管它.Row 和 .Column 分别返回行号和列号,都是数字Long 是一种整数类型,比 Integer 能装更大的数字,行号列号推荐用 Long
案例2:用 Cells 选中并填写数据(中等)
功能说明:用 Cells 方式选中第2行第3列(即 C2),往里面写入文字"你好",再选中第5行第1列(即 A5),写入数字 100,最后弹窗提示完成。
操作步骤:
' =================================' 案例2:用 Cells 选中并填写数据' =================================Sub 用Cells填写数据() Dim 行 As Long Dim 列 As Long ' 第一步:选中第2行第3列,写入文字 行 = 2 列 = 3 Cells(行, 列).Select Cells(行, 列).Value = "你好" ' 第二步:选中第5行第1列,写入数字 行 = 5 列 = 1 Cells(行, 列).Select Cells(行, 列).Value = 100 ' 弹窗提示 MsgBox "数据已写入完成!" & vbCrLf & _ "C2 写入了:你好" & vbCrLf & _ "A5 写入了:100", vbInformation, "完成"End Sub
结果:C2 单元格被写入"你好",A5 单元格被写入 100,最后弹出提示窗口。
代码讲解:
Cells(行, 列).Value = "你好":把"你好"写入指定格子.Value 是单元格的"值"属性,写入数据时用它- 把行号和列号放进变量
行 和 列,以后学了循环就可以自动改变它们的值,批量操作很多格子 - 同一个变量可以反复赋值:
行 = 2 用完后,再写 行 = 5 就变成了 5
案例3:实用小案例——快速定位到数据末尾(实用)
功能说明:在表格的 A 列有一批数据(假设有若干行),写一段代码自动找到 A 列最后一个有数据的单元格,选中它,并弹窗显示它的行号。这是实际工作中非常常用的"找最后一行"技巧。
操作步骤:
- 先在 Excel 的 A 列随便输入几行数据(比如 A1 到 A6 分别输入:姓名、张三、李四、王五、赵六、钱七)
' =================================' 案例3:找到 A 列最后一个有数据的单元格' =================================Sub 找最后一行() Dim 最后一行 As Long ' 从 A1 出发,按 Ctrl+方向键的效果,找到最后一个有数据的格子 最后一行 = Range("A1").End(xlDown).Row ' 选中那个格子 Range("A" & 最后一行).Select ' 弹窗显示结果 MsgBox "A 列最后一个有数据的行号是:" & 最后一行 & vbCrLf & _ "内容是:" & Range("A" & 最后一行).Value, vbInformation, "定位结果"End Sub
结果:Excel 自动选中 A 列最后一个有数据的格子(A6),弹窗显示行号 6 和内容"钱七"。
代码讲解:
Range("A1").End(xlDown) 等价于你在 Excel 里选中 A1 后按 Ctrl + ↓ 方向键,会跳到连续数据的最后一个格子Range("A" & 最后一行) 是一个巧妙写法:& 把字母 "A" 和数字拼在一起,比如 最后一行 = 6 时,就变成了 Range("A6")- 这个技巧在实际工作中极其常用:批量处理数据时,你总需要知道"数据到底有多少行"
本篇小结
- Range 对象就是 Excel 里的格子,用
Range("A1") 选中指定地址的格子 - Cells 对象用数字表示位置,
Cells(行号, 列号) 适合需要计算行号列号的场景 - 连续区域用冒号:
Range("A1:B5");不连续格子用逗号:Range("A1,B3,C5") - 整行整列用
Rows(行号) 和 Columns(列号) - 获取信息用
.Address(地址)、.Row(行号)、.Column(列号)、.Value(值) Range("A1").End(xlDown).Row 是找最后一行的经典技巧
今天只需要记住两件事:
Range("地址") 和 Cells(行, 列) 都能选中格子
下一篇内容预告
第6篇:单元格读写操作——让数据在代码中流动
- 下一篇开始,你的代码将真正"搬运"Excel 数据!
小贴士:Range("A" & 变量) 这种"字符串拼接地址"的技巧非常实用。比如 Range("B" & 10) 就等于 Range("B10")。以后学了循环,你就能用 Range("A" & i) 批量操作任意行了。