Excel-VBA 快速上手(七、获取单元格对象)


一、单元格对象


单元格对象(Range)用来操作和控制工作表中的单元格,使用单元格对象可以设置单元格的格式、单元格的信
息,单元格的内容,选取单元格等,本文列举些常见的用法,最好动手试验一下,要记住灵活运用


二、获取单元格对象和选中单元格


2.1. 选中单个单元格


第一种方式,通过 Range(列名 + 行号).Select 选中单元格:

Public Sub main()
  Dim rng As Range
  Set rng = Range("A1")
  rng.Select
End Sub

第二种方式,通过 Cells(行号, 列名).Select 选中单元格:

Public Sub main()
  Dim rng As Range
  Set rng = Cells(1, "A")
  rng.Select
End Sub

2.2. 选中连续的单元格


1. 定位左上角和右下角,选中之间所有单元格

第一种方式,Range(左上角列名 + 左上角行号 : 右下角列名 + 右下角行号)

Public Sub main()
  Dim rng As Range
  '选中从A1到C10的所有单元格
  Set rng = Range("A1:C10")
  rng.Select
End Sub

第二种方式,Range(Cells(左上角行号,左上角列号), Cells(右下角行号,右下角列号))

Public Sub main()
  Dim rng As Range
  '选中从第一行第一列到第五行第六列的所有单元格
  Set rng = Range(Cells(1, 1), Cells(5, 6))
  rng.Select
End Sub

2. 以基准单元格位置为基础偏移选中

先找到一个用来做基准的单元格,再利用基准单元格对象的 Offset(偏移行数, 偏移列数) 函数来进行位置偏移

Public Sub main()
  Dim rng As Range
  Set rng = Range("A1:B10")
  '最终会选中D3到E12的所有单元格
  rng.Offset(2, 3).Select
End Sub

3. 以基准单元格位置为基础指定选中的行数和列数

先找到一个用来做基准的单元格,再使用单元格对象的 Resize(选中行数, 选中列数)

Public Sub main()
  Dim rng As Range
  Set rng = Range("A1")
  '以A1单元格为基础,向右选中五行三列,最终会选中A1到C5的所有单元格
  rng.Resize(5, 3).Select
End Sub

2.3. 选中多个不连续的单元格


第一种方式:

Public Sub main()
  Dim rng As Range
  Set rng = Range("A1,C1:F4,A7")
  rng.Select
End Sub

第二种方式:

Public Sub main()
  Dim rng As Range
  Set rng = Union(Range("A1"), Range("C1:F5"), Range("A7"))
  rng.Select
End Sub

2.4. 选中行


1. 选中单行

选中单行:通过 Rows(行号) 来选中指定行

Public Sub main()
  Dim rng As Range
  Set rng = Rows(1)
  rng.Select
End Sub

2. 选中连续行

Public Sub main()
  Dim rng As Range
  Set rng = Rows("1:10")
  rng.Select
End Sub

3. 选中多个不连续的行

Public Sub main()
  Dim rng As Range
  Set rng = Range("1:3,5:7")
  rng.Select
End Sub

4. 选中单元格所在的行

Public Sub main()
  Dim rng As Range
  Set rng = Range("C4:C5").EntireRow
  rng.Select
End Sub

2.5. 选中列


1. 选中单列

Public Sub main()
  Dim rng As Range
  Set rng = Columns(1)
  rng.Select
End Sub

2. 选中连续列

Public Sub main()
  Dim rng As Range
  Set rng = Columns("A:D")
  rng.Select
End Sub

3. 选中多个不连续的列

Public Sub main()
  Dim rng As Range
  Set rng = Range("A:B,D:E")
  rng.Select
End Sub

4. 选中单元格所在的列

Public Sub main()
  Dim rng As Range
  Set rng = Range("B1:C6").EntireColumn
  rng.Select
End Sub

2.6. 选中已使用单元格间的连续区域

Public Sub main()
  Dim rng As Range
  Set rng = Sheets(1).UsedRange
  rng.Select
End Sub

2.7. 单元格附近的连续区域


以基准单元格为中心点,在其上下、左右、左上、左下、右上、右下被使用的单元格都会被选中,然后以被选中的
单元格为基准,继续寻找每个选中单元格的上下、左右、左上、左下、右上、右下被使用的单元格,反复循环,直到
找不到被使用的单元格,最后以所选单元格的左上角和右下角为端点,将这一片区域全部选中

单元格附近的连续区域

如上图,基准单元格为 C7,它附近被使用的单元格有 C6、C8、B7、D7,所以这四个单元格会被选中,又因为 B6
与 B7 相邻,D8 与 D7 相邻,所以 B6 和 D8 也会被选中,最后以 B6 和 D8 为端点,选中所有区域

上图的代码为:

Public Sub main()
  Dim rng As Range
  Set rng = Range("C7").CurrentRegion
  rng.Select
End Sub

2.8. 多个单元格间的交集区域

Public Sub main()
  Dim rng As Range
  Set rng = Application.Intersect(Columns("b:c"), Rows("3:5"))
  rng.Select
End Sub

2.9. 定位单元格


在工作表中,我们可以用 Ctrl + G 调出定位窗口,然后设置定位条件来查找并选中单元格,如下图:

定位单元格

在 vba 中也提供了同样的功能来查找单元格,并获取单元格对象,语法为:单元格对象.SpecialCells(Type, Value)

SpecialCells 函数的参数其实就是为了对应上图中的选项,列举常用参数如下:

参数 Type 取值参数 Value 取值与上图选中对应的描述
xlCellTypeVisible不用传参可见单元格
xlCellTypeLastCell不用传参最后一个单元格
xlCellTypeBlanks不用传参空值
xlCellTypeConstants取值为:xlErrors、xlLogical、xlNumbers、xlTextValues常量
xlCellTypeFormulas取值为:xlErrors、xlLogical、xlNumbers、xlTextValues公式

SpecialCells 函数找不到匹配的单元格时会直接报错,如下图,所以实际使用时有必要考虑是否要使用 On Error Resume Next 来跳过错误,On Error Resume Next 在其他系列文章里有介绍:

错误1004
示例代码,定位 A1 到 A3 之间,设置了单元格格式为数字的单元格:

Public Sub main()
  On Error Resume Next
  Dim rng As Range
  Set rng = Range("A1:A3").SpecialCells(xlCellTypeFormulas, xlNumbers)
  rng.Select
  On Error GoTo 0
End Sub

2.10. 指定列中最后一个有内容的单元格

Public Sub main()
  Dim rng As Range
  '找到E列最后一行有内容的单元格
  Set rng = Range("E65536").End(xlUp)
  rng.Select
End Sub

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值